下面列出了常用的運算符,假定變量 a 為 10,變量 b 為 20:
布爾運算
運算符 說明 舉例
! 非運算,表達式為 true 則返回 false,否則返回 true。 [ ! false ] 返回 true。
-o 或運算,有一個表達式為 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 與運算,兩個表達式都為 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
邏輯運算
運算符 說明 舉例
&& 邏輯的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 true
|| 邏輯的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
運算結果
shell中有提到“在shell程序中,0表示真,非0表示假,這一點與C語言恰恰相反。”其實是“判斷的最終結果只有兩種可能:真(0)或者假(非 0)”。也就是說,只有判斷的結果返回值為0時為真,1為假。這一點尤其不可與C語言的while(1)混為一談。
判斷[ ] : [ condition ] 為判斷符,其中的條件condition為真返回 0,假返回 1
狀態(tài)碼:
每個表達式執(zhí)行完退出的時候,都會返回一個退出狀態(tài)碼(exit status 0~255),if語句根據(jù) [ ] 表達式執(zhí)行的退出狀態(tài)碼進行判斷,在所有的退出狀態(tài)碼中,0表示執(zhí)行成功,1~255為退出的狀態(tài)代號。所以,與C語言不同的就在這里,shell的if [ 1 ] 中整數(shù) 0 1 與C語言中的 while(1)用法并不相通,也就是說整數(shù) 0 1 作為退出狀態(tài)碼的時候,確實表示真假,但是并不能作為 if [ ] 的判斷條件來用,雖然shell也是弱數(shù)據(jù)類型的語言。
即:作為條件的退出狀態(tài)碼時,0(成功)表示真,非0表示假
直接作為if []的判斷條件if [ 1 ]時,任何數(shù)字都返回真
兩種運算方式的區(qū)別
-
語法區(qū)別
從上述舉例中可以看出使用邏輯運算符需要加上[[雙大括號]],布爾運算符只需要[單大括號]。
-
功能區(qū)別
邏輯運算符具有特殊的短路功能,可以利用短路特性來實現(xiàn)使用命令1的執(zhí)行結果(執(zhí)行shell命令后會得到一個狀態(tài)碼)控制命令2是否執(zhí)行的效果。
舉例
[[ cmd1 && cmd2]] 當cmd1==false,則cmd2不執(zhí)行.當cmd1==true,則執(zhí)行cmd2.
[[ cmd1 || cmd2]] 當cmd1==false,則cmd2執(zhí)行.當cmd1==true,則cmd2不執(zhí)行.