介紹如何讓 Bash 指令稿在出現執行錯誤時立即停止,並顯示相關的錯誤訊息。
以傳回值判斷是否執行成功
在 Bash 中執行指令之後,可以透過 $? 這個特殊變數來取得前一個執行指令的傳回值,而我們可以透過這個數值來判斷前一個指令是否有執行成功。
#!/bin/bash
# 錯誤的指令
ls --wrong-opt
# 判斷前一個指令是否執行成功
if [ $? -eq 0 ]; then
echo "執行成功"
exit
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 指令也就不會被執行。
