Linux Shell 中各種括號的作用 ()、(())、[]、[[]]、{}


請參考簡書:https://www.jianshu.com/p/1a96d0d9da37

大括號、花括號 {}

代碼塊,又被稱為內部組,這個結構事實上創建了一個匿名函數 。與小括號中的命令不同,大括號內的命令不會新開一個子shell運行,即腳本余下部分仍可使用括號內變量。括號內的命令間用分號隔開,最后一個也必須有分號。{}的第一個命令和左括號之間必須要有一個空格。
如下
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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM