介紹如何讓 Bash 指令稿在出現執行錯誤時立即停止,並顯示相關的錯誤訊息。
以傳回值判斷是否執行成功
在 Bash 中執行指令之後,可以透過 $?
這個特殊變數來取得前一個執行指令的傳回值,而我們可以透過這個數值來判斷前一個指令是否有執行成功。
#!/bin/bash # 錯誤的指令 ls --wrong-opt # 判斷前一個指令是否執行成功 if [ $? -eq 0 ]; then echo "執行成功" exit 0 else echo "執行失敗" >&2 # 輸出至標準錯誤 exit 1 fi
執行後的輸出會像這樣:
ls: unrecognized option '--wrong-opt' Try 'ls --help' for more information. 執行失敗
如果我們只是要輸出簡單的訊息,也可以改用比較簡潔的寫法:
#!/bin/bash # 錯誤的指令 ls --wrong-opt # 判斷前一個指令是否執行成功 [ $? -eq 0 ] && echo "執行成功" || echo "執行失敗" >&2
如果只是需要自訂出現錯誤時的傳回值,可以這樣寫:
#!/bin/bash # 錯誤的指令 ls --wrong-opt # 自訂錯誤傳回值 [ $? -eq 0 ] || exit 1
出錯自動停止執行
在執行 Bash 指令稿的時候,在一開始以 set
設定 -e
選項,就可以讓指令稿在出現任何錯誤時(執行指令傳回非 0
的值),自動停止執行。
#!/bin/bash # 遇到任何錯誤則停止執行 set -e # 錯誤的指令 ls --wrong-opt # 後續的指令 echo "Hello, world."
執行後的輸出為:
ls: unrecognized option '--wrong-opt' Try 'ls --help' for more information.
在這一段指令稿中,由於一開始以 set
設定了 -e
選項,因此在遇到 ls
執行錯誤時,指令稿就會停止執行,後續的 echo
指令也就不會被執行。