在shell程序中,作為條件的退出狀態碼時,0(成功)表示真,非0表示假,這一點與C語言恰恰相反。
每個表達式或者Linux命令執行完退出的時候,都會返回一個退出狀態碼(exit status 0~255),if語句根據 [ ] 表達式執行的退出狀態碼進行判斷,在所有的退出狀態碼中,0表示執行成功,1~255為退出的狀態代號(詳見下表)。所以,與C語言不同的就在這里,shell的if [ 1 ] 中整數 0 1 與C語言中的 while(1)用法並不相通,也就是說整數 0 1 作為退出狀態碼的時候,確實表示真假,但是並不能作為 if [ ] 的判斷條件來用,雖然shell也是弱數據類型的語言。
即:作為條件的退出狀態碼時,0(成功)表示真,非0表示假
直接作為if []的判斷條件if [ 1 ]時,任何數字都返回真
Linux常見的退出狀態碼:
狀態碼: | 描述: |
0 | 命令成功結束 |
1 | 通用未知錯誤 |
2 | 誤用shell命令 |
126 | 命令不可執行 |
127 | 沒找到命令 |
128 | 無效退出參數 |
130 | 通過Ctrl + C 終止 |
shell中可以將 0 1 作為條件寫入判斷語句中嗎?
Bash是腳本語言,也就是一種弱編程語言。0 1 只表示返回狀態碼。
判斷語句中不管寫什么數字都返回真。因此shell中 while[ 1 ]與c語言while(1)循環的意思是不一樣的,前者是因為判斷語句中是數字,所以永真(注意while [ 0 ]也是真),后者是1代表true所以永真。
注:shell腳本中的[ ]條件語句兩端必須有空格 即[空格conditon空格]
參考文章
linux命令返回值的含義解析 - https://www.jb51.net/article/141998.htm
shell命令中的條件測試與判斷語句 - https://www.cnblogs.com/chorm590/p/14864080.html
shell學習筆記(2)shell腳本 0 1 和真假 - https://blog.csdn.net/shGray/article/details/101354337
shell中的0 1與真假 - https://blog.csdn.net/appke846/article/details/80652465
shell真假01的真相 - https://blog.csdn.net/timo1160139211/article/details/74079553