我有以下腳本,我希望腳本停止在x行執行,如果行x遇到錯誤,我該怎麼做?shell腳本停止錯誤
pvcreate /dev/$1 vgextend VolGroup00 /dev/$1 lvextend --size +$2 /dev/VolGroup00/LogVol00 resize2fs /dev/VolGroup00/LogVol00
我有以下腳本,我希望腳本停止在x行執行,如果行x遇到錯誤,我該怎麼做?shell腳本停止錯誤
pvcreate /dev/$1 vgextend VolGroup00 /dev/$1 lvextend --size +$2 /dev/VolGroup00/LogVol00 resize2fs /dev/VolGroup00/LogVol00
您需要在執行此部分之前的某處使用set -e
。
將以下內容添加到頂部。
set -e
執行該行後,如果任何行返回錯誤代碼,shell將退出。 set +e
將再次關閉它(即無論錯誤返回碼如何都切換回繼續)。
查看http://www.davidpashley.com/articles/writing-robust-shell-scripts.html瞭解更多詳情。
你將不得不查詢每一步你必須檢查他們的返回碼。這意味着您必須瞭解每個查詢的返回碼(每個查詢的返回碼可能不同)。下面的示例檢查vgextend是否爲錯誤代碼-1,然後返回-1本身。
pvcreate /dev/$1
vgextend VolGroup00 /dev/$1
if [ $? == -1 ]; then
echo "vgextend returned an error"
exit -1;
fi
lvextend --size +$2 /dev/VolGroup00/LogVol00
resize2fs /dev/VolGroup00/LogVol00
設置-e可能是矯枉過正的,因爲在某些情況下某些錯誤是可以容忍的。在下面的例子中,如果該文件不存在,則rm將返回一個錯誤,但可以繼續(是的,我知道我們可以進行條件刪除,但該示例旨在說明正在制定的要點。)
# delete the file, it it exists
rm thefile
# create the file
touch thefile
我會建議分別標記這些可能失敗的命令,例如'rm somefile || TRUE'。在這種情況下'set -e'不會被觸發。 – 2011-05-12 11:41:12