Shell 關於exit 0的那些坑

2022-06-13 10:24:11 字數 1125 閱讀 8867

在 shell 程式設計中,需慎用 exit 0!

首先必須弄清楚 exit 0 不是 return 0, 區別在於 return 0 用於函式中,表示函式執行成功返回 0;而 exit 0 則代表你當前程式執行成功並且會直接退出當前所執行的指令碼或者程式,相反,return -1 一般表示函式執行失敗返回錯誤; exit 1 (或大於 1)表示程式執行失敗並退出程式。exit 用來返回程序結束時的狀態,一般在父shell中使用 $? 變數來獲取子shell 的退出狀態,判斷子shell是否執行成功。

雖然兩者區別很明顯,也很容易理解,為什麼專門要做一下記錄?確實出現了這樣的乙個錯誤,本應是在子shell中執行使用 exit 0 和 exit 1 的函式介面,父shell對其程序返回值 做判斷操作,結果有人直接在環境指令碼中加了該函式介面做判斷,結果直接導致環境部署失敗,顯然,悲劇了。。。哈哈,所以想著寫篇部落格記錄一下

注:在介面函式中使用 return,在需要退出執行(子 shell)程式時使用 exit

#/bin/bash

function check_extern_input()"

=="exit 0"

]then

echo

"successful exit process right now!"

exit 0

elif

["$"

=="exit 1"

]then

echo

"failed exit process right now!"

exit 1

elif

["$"

=="return 0"

]then

echo

"func normal return, process not exit, enter go on..."

return 0

else

echo

"input again:"fi}

while

true

do check_extern_input

done

在使用不熟悉的 shell 命令或者語法之前,最好先寫個指令碼驗證後使用,形成自測的好習慣!

好了,該睡覺了,明天還得起來搬磚 ^_ ^

exit 0 與exit 1)return的區別

exit 0 正常執行程式並退出程式 exit 1 非正常執行導致退出程式 return 返回函式,若在主函式中,則會退出函式並返回一值。詳細說 1.return返回函式值,是關鍵字 exit 是乙個函式。2.return是語言級別的,它表示了呼叫堆疊的返回 而exit是系統呼叫級別的,它表示了乙個...

關於exit和 exit在vfork之後的研究

這段時間回過頭看unix高階環境程式設計,感覺以前不理解的現在有了明顯的提公升。在第八章的第四節中提到vfork在呼叫exit之後父程序會導致printf輸出出錯返回1,做了乙個實驗,結果顯示exit和 exit結果是一樣的。除非在子程序中呼叫函式關閉輸出流,才會導致printf返回 1.不是很理解...

Shell中exit和return的區別

1.exit關鍵字 exit命令是shell內建命令,用於退出當前shell程序。可以指定退出狀態n,n的取值範圍是0 255,一般情況下,0表示正常退出,非零表示異常退出。如果狀態碼是0 255之外的數值,則會被強制轉換為uint8 t型別的數值,比如 1會被轉換為255,256會發生型別寬度截斷...