shell指令碼返回值及其使用場景

2021-08-14 08:42:25 字數 1766 閱讀 8747

在一些應用中(比如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錯誤"

2shell內建命令使用錯誤(bash文件上有說明)

很少看到, 通常情況下退出碼都為1

126命令呼叫不能執行

程式或命令的許可權是不可執行的

127"command not found"

估計是$path不對, 或者是拼寫錯誤

128exit的引數錯誤

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 在呼叫這個函式的指令碼中是...