請參考簡書: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。