本篇出自:The Will Will Web

 


我舉一個簡單的例子,若我要將檔案先搬移到另一個目錄,然後再將新檔建立起來,應該會用以下指令:

mv some.log $BAKDIR/some-$TODAY.log
gzip -9 $BAKDIR/some-$TODAY.log

不過第一行指令可能會因為檔案被鎖定而造成檔案無法搬移,所以第二行也跟著失敗,若接下來還有一連串的指令都是相關的,可能都會連帶失敗。這樣的情況下,也有可能會造成垃圾檔案存在,或導致整個 script 永遠無法正常執行。

在 Bash 中,判斷上一個指令是否執行成功,可以利用 $? 這個特殊參數,這個特殊刪除所儲存的值正式「上一個指令」所回傳的執行狀態 ( 型態是整數值 ),如果你上一個指令也是一個 Bash script 的話,可以透過 Bash 中的 exit 指令回傳狀態。

只要 $? 這個特殊參數的值是 0 就代表上一個指令「成功執行」,若不等於 0 則代表有問題發生,這時你就可以進行適當的錯誤處理(Error Handling)。

以下是一個簡單的錯誤處理範例:

SUCCESS=0

mv some.log $BAKDIR/some-$TODAY.log

if [ "$?" -ne $SUCCESS ]
then
        echo "Can NOT move some.log to $BAKDIR/some-$TODAY.log!!"
        exit 1
fi

透過這個方式,才能確保程式可以完整且正確的執行所有工作!

 

創作者介紹

胖虎的祕密基地

idobest 發表在 痞客邦 PIXNET 留言(0) 人氣()