Tag: 庆典

bash分配默认值

$ {parameter:= word}分配默认值。 如果参数未设置或为空,则将单词的扩展分配给参数。 参数的值将被replace。 位置参数和特殊参数不能以这种方式分配。 我以为我可以使用这个function来写${LONG_VARIABLE_NAME:=hello}而不是更长的LONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello} ,但是现在bash也试图执行'hello',并且没有find命令。 任何方法来避免这种情况? 或者我会不得不坚持后者? 有人可以举一个例子,指定默认值实际上是有用的吗?

Bash:如果/其他语句在一行中

我正试图检查一个进程(假设它被称为some_process )正在服务器上运行。 如果是,则回显1,否则回显0。 这是我正在使用的命令,但它只能部分工作(更多信息在下面)。 请注意,我需要在一行中编写脚本。 ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi 注意: some_proces[s] [s]中的some_proces[s]是为了防止grep自身返回。 如果some_process正在运行,那么"1"得到回显,这很好。 但是,如果some_process没有运行,没有任何回应。

如何在Bash脚本退出之前运行命令?

如果一个Bash脚本已经set -e ,并且脚本中的一个命令返回一个错误,那么在脚本退出之前我怎么做一些清理? 例如: #!/bin/bash set -e mkdir /tmp/foo # … do stuff … rm -r /tmp/foo 我怎样才能确保/tmp/foo被删除,即使其中一个命令中的某个… do stuff …失败?

检查用户是否存在

我想创build一个脚本来检查用户是否存在。 我正在使用下面的逻辑: # getent passwd test > /dev/null 2&>1 # echo $? 0 # getent passwd test1 > /dev/null 2&>1 # echo $? 2 所以,如果用户存在,那么我们有成功,否则用户不存在。 我已经把上面的命令放在bash脚本中,如下所示: #!/bin/bash getent passwd $1 > /dev/null 2&>1 if [ $? -eq 0 ]; then echo "yes the user exists" else echo "No, the user does not exist" fi 现在,我的脚本总是说,无论如何,用户都存在: […]

Bash脚本 – 将variables内容作为命令运行

我有一个Perl脚本,给我一个定义的列表随机数对应于文件的行。 接下来我想要使用sed从文件中提取这些行。 #!/bin/bash count=$(cat last_queries.txt | wc -l) var=$(perl test.pl test2 $count) variablesvar返回如下输出: cat last_queries.txt | sed -n '12p;500p;700p' cat last_queries.txt | sed -n '12p;500p;700p' 。 问题是我不能运行这最后一个命令。 我尝试使用$var但输出是不正确的(如果我手动运行命令,它工作正常,所以没有问题)。 什么是正确的方法来做到这一点? PS:当然,我可以用Perl做所有的工作,但是我正在努力学习,因为它可以在其他情况下帮助我。

如何在bash中使用mod运算符?

我正在尝试像这样的一行: for i in {1..600}; do wget http://mydomain.com/search/link $i % 5; done; 我试图得到的输出是: wget http://mydomain.com/search/link0 wget http://mydomain.com/search/link1 wget http://mydomain.com/search/link2 wget http://mydomain.com/search/link3 wget http://mydomain.com/search/link4 wget http://mydomain.com/search/link0 但是我实际得到的只是: wget http://mydomain.com/search/link

如何沉默Bash脚本中的输出?

我有一个程序,输出到标准输出,并希望沉默输出在Bash脚本pipe道到一个文件。 例如,运行该程序将输出: % myprogram % WELCOME TO MY PROGRAM % Done. 我想要下面的脚本不输出任何东西到terminal: #!/bin/bash myprogram > sample.s

循环访问数组,同时打印索引和值

我想要做这样的事情: foo=( ) foo[0]="bar" foo[35]="baz" for((i=0;i<${#foo[@]};i++)) do echo "$i: ${foo[$i]}" done # Output: # 0: bar # 1: 然后我试着循环使用它在: foo=( ) foo[0]="bar" foo[35]="baz" for i in ${foo[@]} do echo "?: $i" done # Output: # ?: bar # ?: naz 但在这里我不知道指数值。 我知道你可以这样 foo=( ) foo[0]="bar" foo[35]="baz" declare -p foo # Output: # declare -a foo='([0]="bar" […]

BASH中的条件是什么命令意味着什么都不做?

有时候在编写条件的时候,我需要的代码什么也不做,比如在这里,当$a大于“10”时,BASH什么都不做,如果$a小于“5”,打印“1”,否则打印“2”: if [ "$a" -ge 10 ] then elif [ "$a" -le 5 ] then echo "1" else echo "2" fi 这虽然造成一个错误。 有一个什么都不做的命令,不会减慢我的脚本吗?

内联评论bash?

我希望能够在单行命令中注释一个单一的标志。 Bash似乎只有`从#到结束'的评论。 我正在看像这样的技巧: ls -l $([ ] && -F is turned off) -a /etc 这是丑陋的,但总比没有好。 有人有更好的build议吗? UPDATE 以下似乎工作,但我不知道是否是便携式: ls -l `# -F is turned off` -a /etc