退出碼的值 含義 例子 注釋
1 通用錯誤 let "var1 = 1/0" 各種各樣的錯誤都可能使用這個退出碼, 比如"除0錯誤"
2 shell內建命令使用錯誤(bash文件上有說明) 很少看到, 通常情況下退出碼都為1
126 命令呼叫不能執行 程式或命令的許可權是不可執行的
127 "command not found" 估計是$path不對, 或者是拼寫錯誤
128 exit的引數錯誤 exit 3.14159 exit只能以整數作為引數, 範圍是0 - 255(見腳注)
128+n 訊號"n"的致命錯誤 kill -9 指令碼的$ppid $? 返回137(128 + 9)
130 用control-c來結束指令碼 control-c是訊號2的致命錯誤, (130 = 128 + 2, 見上邊)
255* 超出範圍的退出狀態 exit -1 exit命令只能夠接受範圍是0 - 255的整數作為引數
通過上面的表, 我們了解到, 退出碼1 - 2, 126 - 165, 和255 [1] 都具有特殊的含義, 因此應該避免使用使用者指定的退出引數. 如果指令碼使用exit 127作為退出語句, 那麼可能就會在故障診斷的時候產生混淆(如何判斷這是由"command not found"引起的, 還是由使用者定義引起的?). 然而, 許多指令碼使用exit 1作為通用的返回錯誤值. 因為退出碼1能夠表示的錯誤太多了, 不過這麼做, 對於除錯來說, 也起不到任何幫助的作用.
其實早就有人對退出狀態值進行了系統的分類(請參考/usr/include/sy***its.h), 不過這個檔案是為c/c++程式設計師準備的. 其實shell指令碼也需要這樣乙個類似的標準. 所以本文作者呼籲限制使用使用者定義的退出碼, 尤其是範圍64 - 113(還有0, 表示成功), 這麼做, 就可以和c/c++標準保持一致. 這樣我們就有了50個可用的退出碼, 而且非常便於故障診斷.
本書中所有例子中的使用者定義退出碼都符合這個標準, 除了那些超出標準範圍的例子, 比如例子 9-2.
只有在bash或sh提示符下, 當shell指令碼退出後, 在命令列上使用$?才會得到與上表相一致的結果. 在某些情況下, 執行c-shell或者tcsh可能會給出不同的值.
注意事項
[1]
超出範圍的退出值可能會產生意想不到的退出碼. 如果退出值比255大, 那麼退出碼將會取256的模. 舉個例子, exit 3809的退出碼將是225(3809 % 256 = 225).
shell 返回值一
今天看同事寫的指令碼,發現其中用乙個函式為變數賦值,然後發現那個函式的return值並非是我所期望的值,於是查詢了一些資料,發現自己之前對return的理解大大的錯誤了。return命令會使得乙個函式返回return命令會返回乙個單一的數字引數,而這個數字引數 0 255 在呼叫這個函式的指令碼中是...
shell返回值二
linux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫。下面說說它的定義方法,以及呼叫需要注意那些事項。一 定義shell函式 define function 語法 function funname 說明 1 可以帶function fun 定義,也可以直接fun 定義,不...
shell 命令返回值 傳遞
方法一 注意cat命令外面的那個引號是反引號,鍵盤上數字1旁邊那個 desktop temp aaa cat 123 desktop temp echo aaa abc 方法二 desktop temp ccc cat 123 desktop temp echo ccc abc cat test3 ...