shell中布爾運算和邏輯運算的區(qū)別

下面列出了常用的運算符,假定變量 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í)行.
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容