標籤:exit 退出狀態
1. intruduction
exit 使shell(指令碼)以指定狀態值退出, 不帶參數執行exit時,shell或指令碼以最後執行命令的狀態值退出。 shell退出前, trap會捕獵EXIT訊號。0表示執行成功,非0值表執行失敗。它經常用於判斷語句和迴圈語句來控製程序和運算式的流程。
exit 使得編寫指令碼時可以自行設定退出時的狀態值,使用$?引用,特定的退出狀態值一般也會定義特定的退出含義。也可以用test來檢查運算式的退出狀態。
bash 所有builtin 命令都會在成功時返回狀態0,失敗時返回非0,所以它們可以用於條件命令和命令list中
exit status退出狀態
執行某一函數,程式或命令後退出時,向父命令返回一個整數,這個稱為退出狀態。不帶參數的exit,則退出狀態為最後被執行命令的退出狀態。父進程可以中可以用$?引用其值
判斷語句和迴圈語句也會用到exit status內建命令來控製程序流程,用來返回給父進程一個status值且指令碼退出,且傳回值儲存在$?中, status 用0~255 之間的數字表示,這樣實現指令碼主動控制傳回值。
POSIX規定的幾種退出狀態
退出狀態 |
|
0 |
運行成功 |
1~125 |
各種運行失敗 |
126 |
找到命令,但無法執行 |
127 |
未找到啟動並執行命令 |
>128 |
命令被系統強行結束 |
2. sysopsis
exit [status value]
status value 0~255 值儲存在?變數中
3. eg
exit 退出shell,不改變$?的值
exit 1 退出shell, 且返回1
4. 比較return
exit是一個系統調用,用於在程式啟動並執行過程中隨時結束進程,它會刪除進程佔用的記憶體空間,並將status是返回給父進程,這個status通常用於標識程式的一些運行資訊。
return是語言層級的一個關鍵字,它表示呼叫堆疊的返回,用於帶一個status從函數退出。return不帶參數時,則會返回函數體中最後一個命令的傳回值。
return 也可以用於. (source) 方式(子shell)執行指令碼時的返回,也可以返回指定的status 或者指令碼中最後一個命令的exit status.
return 不用於函數體,也沒有以.(source)方式執行指令碼時,則會報錯。
return會觸發trap
所以正確的用法是將return 用於函數的返回,exit用於進程的退出。比如如果主函數調用子函數,在子函數裡使用return會回到主函數中,但在子函數中誤用exit則會直接退出進程。
本文出自 “Adelphos” 部落格,請務必保留此出處http://adelphos.blog.51cto.com/2363901/1636235
exit-shell退出狀態