shell脚本停止错误

时间:2011-05-12 10:03:01

标签: linux shell

我有以下脚本,如果第x行遇到错误,我希望脚本在第x行停止执行,我该怎么做?

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

3 个答案:

答案 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