请参考简书:https://www.jianshu.com/p/1a96d0d9da37
大括号、花括号 {}
JENKINS_WAR="/usr/lib/jenkins/jenkins.war" test -r "$JENKINS_WAR" || { echo "$JENKINS_WAR not installed"; if [ "$1" = "stop" ]; then exit 0; else exit 5; fi; }
[和[[的区别
区别一
在使用"[[ ]]"时,不能使用"-a"或者"-o"对多个条件进行连接。
在使用"[ ]"时,如果使用"-a"或者"-o"对多个条件进行连接,"-a"或者"-o"必须被包含在"[ ]"之内。
在使用"[ ]"时,如果使用"&&"或者"||"对多个条件进行连接,"&&"或者"||"必须在"[ ]"之外。
区别二
[是shell命令,在它包围的表达式是它的命令行参数,所以串比较符>和<需要转义,否则就变成io重定向了。
[[是shell关键字,不会做命令行扩展,所以<和>不需要进行转义。但是语法相对严格,如在[中可以用引号括起操作付,[[则不行。如if [ "-z" "ab" ]。
区别三
[[可以做算术扩展,[则不行。如if [[ 11+1 -eq 100 ]],而if [ 11+1 -eq 100 ]则会报错。
区别四
对比字符串时,[ 末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == "ab"x ]时如果没有了x ,并且$1是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。如if [[ $1 == a*a ]] 或者if [ $1x == a*ax ]
区别五
当使用"-n"或者"-z"这种方式判断变量是否为空时,"[ ]"与"[[ ]]"是有区别的,使用"[ ]"时需要在变量的外侧加上双引号,与test命令的用法完全相同,使用"[[ ]]"时则不用。
区别六
在使用符号"=~"去匹配正则表达式时,只能使用"[[ ]]",当使用">"或者"<"判断字符串的ASCII值大小时,如果结合"[ ]"使用,则必须对">"或者"<"进行转义。
字符串和数字比较的区别
在shell中对比字符串和对比数字,要分开两种方式。
1)对比字符串只能使用==、<、>、!=、-z、-n。对比字符串时,末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == "ab"x ]时如果没有了x ,并且$1是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。使用<或者>时,如果是用[ ],需要用转义符"",如>。
2)对比数字使用既能使用-eq、-ne、-gt、-ge、-lt、-le,也能使用==、<、>、!=。其中-eq的意思是equal,-ne是unequal,-gt是greater than,-ge是greater than or equal to,-lt是less than,-le是less than or equal to。