您好,登錄后才能下訂單哦!
小編給大家分享一下shell腳本返回值及其使用場景的實現方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
應用場景
在一些應用中(比如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() { echo input params:$1 if [ $1 != 0 ]; then echo wahaha exit $1 fi } ls / echo 1.result:$? check_result $? cat /xxxyyy v1=$? echo 2.result:{v1} check_result $v1
check_result()為定義的檢測函數,當命令的返回碼非0時,shell腳本停止執行,返回代碼。
v1=$? 保存命令執行返回碼,其為臨時變量。需要保存留作后用。
附錄:
1、shell 返回碼
表格 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的整數作為參數 |
2、shell返回碼與函數返回碼、命令返回碼的區別
shell返回碼,標識整個腳本的執行結果狀態,用“exit 返回碼”表示。
函數返回碼,標識一個函數的執行結果狀態,用“return 返回碼”表示。
命令返回碼,標識一個命令的執行結果狀態,在命令執行后,緊跟著獲取返回碼,用"$?"獲取。
以上是“shell腳本返回值及其使用場景的實現方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。