應(yīng)用場(chǎng)景
在一些應(yīng)用中(比如Jenkins),嵌入了shell腳本,系統(tǒng)通過shell腳本的返回值來判斷執(zhí)行結(jié)果,如果返回值非0,則發(fā)生了執(zhí)行錯(cuò)誤,需要中止執(zhí)行,這在使用單個(gè)命令時(shí)沒有問題。然而,在shell (A)腳本又調(diào)用了shell腳本文件(B )時(shí),當(dāng)被調(diào)用的shell腳本B執(zhí)行過程中發(fā)生了錯(cuò)誤時(shí),系統(tǒng)不會(huì)認(rèn)為B有問題,而是繼續(xù)往下執(zhí)行。這樣就會(huì)掩蓋了問題。
解決
在被調(diào)用的shell腳本B中返回錯(cuò)誤代碼,當(dāng)被調(diào)用的shell腳本B中發(fā)生錯(cuò)誤時(shí),捕捉該錯(cuò)誤代碼,然后返回該錯(cuò)誤代碼,這樣系統(tǒng)就能捕獲被調(diào)用的腳本B的錯(cuò)誤代碼,而及時(shí)中止執(zhí)行。
1、實(shí)現(xiàn)步驟:
(1)獲取執(zhí)行結(jié)果代碼。使用“$?”獲取。
(2)加入執(zhí)行執(zhí)行結(jié)果代碼檢測(cè)函數(shù),若發(fā)現(xiàn)結(jié)果代碼非0,則返回腳本的執(zhí)行代碼。使用“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()為定義的檢測(cè)函數(shù),當(dāng)命令的返回碼非0時(shí),shell腳本停止執(zhí)行,返回代碼。
v1=$? 保存命令執(zhí)行返回碼,其為臨時(shí)變量。需要保存留作后用。
附錄:
1、shell 返回碼
表格 D-1. "保留的"退出碼
退出碼的值 | 含義 | 例子 | 注釋 |
---|---|---|---|
1 | 通用錯(cuò)誤 | let "var1 = 1/0" | 各種各樣的錯(cuò)誤都可能使用這個(gè)退出碼, 比如"除0錯(cuò)誤" |
2 | shell內(nèi)建命令使用錯(cuò)誤(Bash文檔上有說明) | 很少看到, 通常情況下退出碼都為1 | |
126 | 命令調(diào)用不能執(zhí)行 | 程序或命令的權(quán)限是不可執(zhí)行的 | |
127 | "command not found" | 估計(jì)是$PATH不對(duì), 或者是拼寫錯(cuò)誤 | |
128 | exit的參數(shù)錯(cuò)誤 | exit 3.14159 | exit只能以整數(shù)作為參數(shù), 范圍是0 - 255(見腳注) |
128+n | 信號(hào)"n"的致命錯(cuò)誤 | kill -9 腳本的$PPID | $? 返回137(128 + 9) |
130 | 用Control-C來結(jié)束腳本 | Control-C是信號(hào)2的致命錯(cuò)誤, (130 = 128 + 2, 見上邊) | |
255* | 超出范圍的退出狀態(tài) | exit -1 | exit命令只能夠接受范圍是0 - 255的整數(shù)作為參數(shù) |
2、shell返回碼與函數(shù)返回碼、命令返回碼的區(qū)別
到此這篇關(guān)于shell腳本返回值及其使用場(chǎng)景的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)shell腳本返回值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:蚌埠 日喀則 紹興 武威 西寧 麗江 安康 迪慶
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《shell腳本返回值及其使用場(chǎng)景的實(shí)現(xiàn)》,本文關(guān)鍵詞 shell,腳本,返回,值,及其,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。