shell脚本停止错误

问题描述:

我有以下脚本,我希望脚本停止在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 
+0

我会建议分别标记这些可能失败的命令,例如'rm somefile || TRUE'。在这种情况下'set -e'不会被触发。 – 2011-05-12 11:41:12