标签: scripting

如何比较总文件

假设我有 2 个配置文件,例如:文件 1:

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
virtual_gid_maps = static:5000
Run Code Online (Sandbox Code Playgroud)

文件2:

virtual_gid_maps = static:5000
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
Run Code Online (Sandbox Code Playgroud)

如果您仔细观察,您会看到一起有一行开头,virtua_gid_*但文件 1 将其放在文件末尾,而文件 2 将其放在文件头。

假设我有 2 个具有不同位置的相同行的文件,但位置对我来说并不重要,成为或不成为很重要。

我如何比较我的文件?

scripting diff

0
推荐指数
1
解决办法
78
查看次数

如何压缩 chmod UNIX 命令

无论如何要压缩以下 UNIX 命令:

chmod 755 scriptA.ksh | chmod 755 scriptB.ksh | chmod 755 scriptC.ksh | chmod 755 scriptD.ksh
Run Code Online (Sandbox Code Playgroud)

上面的命令使每个 KornShell (ksh) 脚本都可以执行,因此压缩命令的长度会更短,并且仍然可以使每个 ksh 脚本都可以执行。

command-line shell scripting chmod

0
推荐指数
2
解决办法
2282
查看次数

为什么这个比较返回不相等?

似乎无法将此评估为真

is_equal () {
  in="$1"
  if [[ "$in" == "385" ]]; then
    return 0
  else
    return 1
  fi
}
a= is_equal 385
if [[ "$a" ]]; then
  echo "equal"
else
  echo "NOT equal"
fi

$ ./equal_nums.sh 
NOT equal
$
Run Code Online (Sandbox Code Playgroud)

scripting shell-script

0
推荐指数
1
解决办法
337
查看次数

一个可以自动化 git commit 消息内容的 bash 脚本

通常,当我在 Git 中提交对子模块的更改时(如果这是唯一的更改),我会将结果提供git diff <submodule-name>给提交消息的正文(在我的 git 配置中diff.submodule设置为log)。所以消息看起来像:

Updated Core Submodule

Submodule Core eaedd3f..0721763:
  < Fixed ZA-123: Crash in rendering module
  < Merge 'develop' into 'master'
Run Code Online (Sandbox Code Playgroud)

我一直在尝试编写一个脚本来自动执行此操作,我可以将其绑定到我的 git 配置中的别名。要生成上面的文本,理想情况下我想运行一个命令,例如:

$ git submodule-commit Core
Run Code Online (Sandbox Code Playgroud)

这将执行以下操作(大致):

  1. 暂存对指定子模块的任何更改(Core在本例中)
  2. 区分对子模块的更改并存储稍后生成的消息的输出文本
  3. 运行git commit并提供主题行(Updated $1 Submodule,或者类似的东西,在这个例子中$1是哪里Core)。
  4. 将之前存储的差异结果也添加到提交消息中

我没有运气为此编写一个简单的脚本。我对 bash / shell 脚本不是很有经验。任何人都可以帮助提供实现此目的的实现吗?

scripting git

0
推荐指数
1
解决办法
5093
查看次数

无法执行 bash 脚本(意外元素 '(' )

我创建了一个脚本来检查我是否安装了 Node、Npm、Bower 和 Susy,但是当我执行它时,我收到一个我无法解决的错误。

这是脚本:

    isInstalled(){
  command -v $1 >/dev/null 2>&1 || command -v $2 >/dev/null 2>&1 || { echo >&2 "I require $1 but it's not installed.  Aborting."; return false;}  
}

installNode() {
  if [[ !isInstalled('node', 'nodejs') ]]; then
    echo "Node is not installed. Installing..."
    curl https://www.npmjs.org/install.sh | sh
  fi
}

installBower()
{

   if [[ !isInstalled('npm') ]]; then
     echo "Npm is not installed. Installing..."
     curl -L https://npmjs.org/install.sh | sh
   else
     echo "Npm is installed. Checcking Bower..."
   if [[ !isInstalled('bower') …
Run Code Online (Sandbox Code Playgroud)

shell scripting npm

0
推荐指数
1
解决办法
303
查看次数

无法打开文件作为第一个参数

我正在尝试运行一个脚本,如:

./script.sh file

但我收到(如果我使用 txt 文件):

=:        cannot open `=' (No such file or directory)
test.txt: ASCII text
Second
Run Code Online (Sandbox Code Playgroud)

如果我使用 gz 文件:

=:           cannot open `=' (No such file or directory)
test.txt.gz: gzip compressed data, was "test.txt", last modified: Wed Jul 20 09:17:58 2016, from Unix
Second
Run Code Online (Sandbox Code Playgroud)

(我有脚本和文件在同一目录中)

脚本:

#!/bin/bash

file = $1

if [[ $file == *.gz ]];then

    echo "First"
else
    echo "Second"

fi
Run Code Online (Sandbox Code Playgroud)

scripting shell-script

0
推荐指数
1
解决办法
4802
查看次数

使用 cat 检查文件中是否存在字符串 | 格雷普

大家好

目的:检查文件中是否存在字符串并相应地运行操作

if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"
Run Code Online (Sandbox Code Playgroud)

在行存在和不存在的情况下,输出始终显示“行存在,跳过”。

将输出添加到变量中,例如 x,用变量替换 if 语句中的行会产生正确的输出,

如何“跳过”可变路由并直接运行命令?

grep scripting shell-script variable

0
推荐指数
1
解决办法
2万
查看次数

如何在脚本变量上使用两个字的密码?

我正在尝试构建一个脚本来自动执行现有数据库的备份过程。

我遇到的问题是将mysqldump数据库密码传递给命令(见下文),该密码有两个由空格分隔的单词。

# database credentials
DATABASEHOST="localhost"
DATABASEUSER="username"
DATABASEPASSWORD="Compound Password"
DATABASESCHEMA="schema"

# Local directory of mysqldump file
LOCALDIR=/home/user/db-bkp

#--- end config

mysqldump --host=$DATABASEHOST --user=$DATABASEUSER --password=$DATABASEPASSWORD $DATABASESCHEMA > $LOCALDIR/`date +%Y%m%d`_bkp_$DATABASESCHEMA.sql
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,相关的mysqldump相关消息是:

mysqldump: Got error: 1045: "Access denied for user 'username'@'localhost' (using password: YES)" when trying to connect

我在这里做错了什么以及如何解决它?

scripting bash backup mysql

0
推荐指数
1
解决办法
234
查看次数

如何打印变量名称而不是其值 shell 脚本?

下面是我的程序,a.sh

A=10 B=20 C=0 D=1

for var in {A,B,C,D}
do
    if [ $var = 0 ]
    then
        echo "$var value is 0"
    else
        echo "Ok" 
    fi
done
Run Code Online (Sandbox Code Playgroud)

结果是:

# sh a.sh

Ok
Ok
0 value is 0   <==== Instead of this I want  "C value is 0"
Ok
Run Code Online (Sandbox Code Playgroud)

我们应该怎么做 ?

shell scripting

0
推荐指数
1
解决办法
9381
查看次数

在 bash shell 脚本中,$2 可以等于命令行上的多个参数,还是我需要 $3、$4 等...?

在下面的示例脚本中,它用于发送到一个或两个电子邮件地址,具体取决于哪个进程正在使用该脚本。我需要为额外的电子邮件地址添加 3 美元,还是 2 美元就足够了?

(
for file in /usr/app/tst/$1/MS_CASE_ST*.csv;
do
   uuencode ${file} $(basename ${file})
done
) | mailx -s "MS_CASE_ST*.csv file contains data. Please Research" $2 
Run Code Online (Sandbox Code Playgroud)

脚本 example.sh 如何执行的示例:

$ ./example.sh output email-1@web.com email-2@web.com
Run Code Online (Sandbox Code Playgroud)

scripting bash parameter

0
推荐指数
1
解决办法
1358
查看次数

标签 统计

scripting ×10

shell ×3

shell-script ×3

bash ×2

backup ×1

chmod ×1

command-line ×1

diff ×1

git ×1

grep ×1

mysql ×1

npm ×1

parameter ×1

variable ×1