Shell Script 裡面的指令, 如果沒有用條件控制 (例如 if), 不管之前的指令執行結果如何, 每個指令也會逐一執行, 例如:
|
1 2 3 4 5 |
#!/bin/sh cd /path/dir rm -f *.txt |
上面的程式碼很簡單, 只是用 cd 指令轉換到 /path/dir 目錄, 然後執行 rm 指令, 將所有 .txt 結尾的檔案刪除。
但如果執行 cd 指令的時出錯, 例如 /path/dir 目錄不存在, 或者沒有權限進入, 那便會在當前目錄刪除所有 .txt 副檔名的檔案。
解決方法十分簡單, 只要加上 “set -e” 一行, 那麼 Shell Script 執行指令遇到錯誤時, 便會立即終止執行, 並自動退出離開, 以上面的例子, 可以這樣寫:
|
1 2 3 4 5 6 |
#!/bin/sh set -e cd /path/dir rm -f *.txt |
當然另一個做法可以用 if 來檢查 cd 的執行結果, 寫法是這樣:
|
1 2 3 4 5 6 7 8 |
#!/bin/sh if cd /path/dir; then rm -f *.txt else echo "Could not change directory!" 1>&2 exit 1 fi |