
理解 Shell 腳本中的退出程式碼
退出代碼,通常稱為返回代碼或退出狀態,是程式、腳本或命令完成後傳遞給作業系統的數位訊號。這些程式碼提供了寶貴的見解,無需仔細查看冗長的日誌,幫助您快速診斷故障和問題。
在 shell 腳本領域,協定很簡單:成功執行返回退出程式碼0
,而任何非零值通常表示錯誤,標準值介於1
和之間255
。
若要在類別 Unix 環境(如 Bash 或 Zsh)中檢查最後執行的命令的退出程式碼,請利用特殊變數$?
。具體操作如下:
ls /nonexistent_directoryecho $?

此指令echo $?
顯示上一個指令的退出代碼。結果0
表示成功,而像、或這樣的值1
則2
表示127
各種錯誤,例如缺少檔案或權限問題。
利用退出程式碼進行腳本調試
使用退出代碼可以大大增強您偵錯腳本的能力。它們使您的腳本能夠識別操作是否成功或失敗,並據此確定後續步驟。
考慮這個實際的例子:該腳本旨在將檔案複製到備份位置並報告其成功:
#!/bin/bash # Attempt to copy the file cp important_file.txt backup/# Verify if the copy was successful if [ $? -eq 0 ]; then echo "Backup successful!" else echo "Backup failed with exit code $?" exit 1 # Send an error code, indicating failure fi
這裡,如果cp
命令返回退出代碼0
,則表示一切正常。任何非零值都會提示腳本輸出錯誤訊息並以退出代碼終止1
。
建立自訂退出程式碼
除了檢查現有的退出代碼之外,您還可以定義自訂程式碼來表示各種錯誤。這種做法可以增強腳本的清晰度,幫助使用者識別可能出現的特定問題。
作為說明,請考慮以下腳本:
#!/bin/bash # Ensure an argument (filename) is provided. if [ -z "$1" ]; then echo "Usage: $0 <filename>" exit 1 # Exit code 1 indicates missing argument fi # Check for the existence of the file provided if [ ! -f "$1" ]; then echo "Error: File not found" exit 2 # Custom exit code 2 indicates file absence fi
這種結構允許使用者快速確定錯誤:退出代碼1
表示沒有給出參數,而2
表示缺少文件。這種清晰度很有用,特別是當腳本是更大系統的組成部分時。
常見退出代碼指南
雖然退出程式碼在不同程式之間會有所不同,但還是存在一些普遍的模式,尤其是在 Linux 和類別 Unix 系統中。以下是經常遇到的退出代碼的摘要:
-
0
:成功 – 操作順利完成。 -
1
:發生了一般錯誤,沒有具體細節。 -
2
:shell 內建指令使用不正確,通常是因為缺少參數。 -
126
:命令已找到但缺少執行權限。 -
127
:未找到命令,該命令不存在或拼字錯誤。 -
128
:無效的退出參數與退出代碼語意相矛盾。 -
130
:程序被Ctrl+暫停C。 -
137
:由於記憶體不足,該進程已終止。 -
255
:嘗試傳回超出有效範圍的退出代碼。
特定的應用程式可能會分配自己獨特的退出代碼。例如,當匹配、不匹配以及出現錯誤時,grep
命令都會傳回。開發人員通常在類別 Unix 環境中利用介於之間的所有值。0
1
2
0
255
利用退出代碼來連結指令
Bash 腳本提供了兩個運算子&&
和||
,使您能夠根據0
前面的命令的成功(退出程式碼)或失敗(非零退出)來連結命令:
-
&&
:僅當前一個指令成功時才執行下一個指令。 -
||
:如果前一個命令失敗,則執行下一個命令。
範例場景可能涉及嘗試建立目錄然後切換到該目錄。如果任一操作失敗,則會顯示錯誤訊息指示問題:
mkdir new_directory && cd new_directory || echo "Failed to create and access directory"
在這種情況下,該命令mkdir new_directory
將嘗試建立目錄。如果此操作有效,它將立即繼續cd new_directory
。如果其中任何一個發生故障,||
操作員就會啟動並觸發顯示錯誤訊息。
最後的想法
儘管它們看起來微不足道,但退出程式碼卻是命令列功能的一個重要面向。它們為程序建立了一種傳達成功和失敗的標準化方法,這是協調複雜系統的重要組成部分。
如果您正在嘗試進入命令列介面的世界,請務必檢查echo $?
命令是否沒有產生預期的結果。您很快就會掌握在自己的腳本編寫工作中使用退出程式碼的技巧,並認識到它們在增強命令之間通訊方面的關鍵作用。
常見問題
1. Shell 腳本中的退出代碼代表什麼?
退出代碼作為數位訊號,指示 Shell 腳本中的命令或腳本的成功或失敗。程式碼0
表示成功,非零值則表示各種錯誤。
2.如何檢查 Bash 中命令的退出代碼?
若要檢查最後執行的命令的退出代碼,請使用命令echo $?
。這將顯示用於診斷的數字退出代碼。
3.我可以在腳本中設定自己的退出代碼嗎?
絕對地!您可以在腳本中定義自訂退出代碼來傳達特定的錯誤情況。這有助於使您的腳本更具資訊性和用戶友好性。
發佈留言 ▼