2011-05-12 225 views
9

我有以下腳本,我希望腳本停止在x行執行,如果行x遇到錯誤,我該怎麼做?shell腳本停止錯誤

 
pvcreate /dev/$1 
vgextend VolGroup00 /dev/$1 
lvextend --size +$2 /dev/VolGroup00/LogVol00 
resize2fs /dev/VolGroup00/LogVol00 

回答

9

您需要在執行此部分之前的某處使用set -e

1

你將不得不查詢每一步你必須檢查他們的返回碼。這意味着您必須瞭解每個查詢的返回碼(每個查詢的返回碼可能不同)。下面的示例檢查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 
+0

我會建議分別標記這些可能失敗的命令,例如'rm somefile || TRUE'。在這種情況下'set -e'不會被觸發。 – 2011-05-12 11:41:12