我有以下脚本,如果第x行遇到错误,我希望脚本在第x行停止执行,我该怎么做?
pvcreate /dev/$1 vgextend VolGroup00 /dev/$1 lvextend --size +$2 /dev/VolGroup00/LogVol00 resize2fs /dev/VolGroup00/LogVol00
答案 0 :(得分:12)
将以下内容添加到顶部。
set -e
执行该行后,如果任何行返回错误代码,shell将退出。 set +e
将再次将其关闭(即,无论错误返回码是什么,都切换回继续)。
有关详细信息,请参阅http://www.davidpashley.com/articles/writing-robust-shell-scripts.html。
答案 1 :(得分:9)
在执行此部分之前,您需要在某处使用set -e
。
答案 2 :(得分: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