在一些應用中(比如jenkins),嵌入了shell指令碼,系統通過shell指令碼的返回值來判斷執行結果,如果返回值非0,則發生了執行錯誤,需要中止執行,這在使用單個命令時沒有問題。然而,在shell (a)指令碼又呼叫了shell指令碼檔案(b )時,當被呼叫的shell指令碼b執行過程中發生了錯誤時,系統不會認為b有問題,而是繼續往下執行。這樣就會掩蓋了問題。
在被呼叫的shell指令碼b中返回錯誤**,當被呼叫的shell指令碼b中發生錯誤時,捕捉該錯誤**,然後返回該錯誤**,這樣系統就能捕獲被呼叫的指令碼b的錯誤**,而及時中止執行。
1、實現步驟:
(1)獲取執行結果**。使用「$?」獲取。
(2)加入執行執行結果**檢測函式,若發現結果**非0,則返回指令碼的執行**。使用「exit [**]」表示。
2、示例:
shell a:
#do something ...
/home/test/b.sh
#do something ...
shell b(/home/test/b.sh):
check_result()
ls /
echo 1.result:$?
check_result $?
cat /***yyy
v1=$?
echo 2.result:
check_result $v1
check_result()為定義的檢測函式,當命令的返回碼非0時,shell指令碼停止執行,返回**。
v1=$? 儲存命令執行返回碼,其為臨時變數。需要儲存留作後用。
參考:linux shell bash 帶有特殊含義的退出碼
** d-1. "保留的"退出碼
退出碼的值
含義例子
注釋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的整數作為引數
shell返回碼,標識整個指令碼的執行結果狀態,用「exit 返回碼」表示。
函式返回碼,標識乙個函式的執行結果狀態,用「return 返回碼」表示。
命令返回碼,標識乙個命令的執行結果狀態,在命令執行後,緊跟著獲取返回碼,用"$?"獲取。
shell指令碼 之 函式返回值
shell 函式返回值 只允許返回數字,若不是則報 line 6 return haha numeric argument required 若是寫了return 則返回return 語句跟的數值,若是沒有return語句則返回最後乙個命令的執行結果。用例子說話吧 1 bin bash 2 3 re...
shell 指令碼獲取介面返回值
bin bash echo 任務 start result code echo 任務result if result code 1 then echo success exit 0 else echo failed exit 1 fi我這邊介面的返回值就是 int 型別的引數,所有返回值 resul...
shell 返回值一
今天看同事寫的指令碼,發現其中用乙個函式為變數賦值,然後發現那個函式的return值並非是我所期望的值,於是查詢了一些資料,發現自己之前對return的理解大大的錯誤了。return命令會使得乙個函式返回return命令會返回乙個單一的數字引數,而這個數字引數 0 255 在呼叫這個函式的指令碼中是...