让shell语句执行错误时报错停止的几种方法

让shell语句执行错误时报错停止的几种方法

让shell语句执行错误时报错停止的几种方法

通过返回值

要判断一段代码是否出现了异常,一个最基本的判断就是对他返回值的判断。在shell中,我们往往规定0为正常,一切非0返回值则为不正常。但往往我们在写shell脚本的时候,忽略对于返回值的判断。我们看一个很基本的shell程序

#!/bin/shcd /home/xxxx/rm -rf *

这个脚本的意思很简单,就是切到某一个目录下,然后将该目录下所有的内容都删除。首先,rm这种东西出现在脚本中,就是一个很危险的操作,而这个程序的关键之处还在于,并没有对第一行shell的返回值进行任何的判断,也就是说对于cd那行代码无论执行失败与否,都会去执行下面的那段rm,试想如果在某些情况下cd那段代码失败了之后,会出现多么可怕的后果。所以,我们应该对于cd的代码做返回值的判断。

#!/bin/shcd /home/xxxx/if [ "$?"= "0" ]; then rm -rf *else echo "cannot change directory" 1>&2 exit 1fi

$?这个常量代表的就是上一段shell的返回值。这个我在前面一片文章里也提到过shell中的trap和expr。这样写的话,就要比先前的程序安全多了,如果没有cd到相应目录,则不会去执行删除操作。

让shell语句执行错误时报错停止的几种方法

当然,程序里这样写是有些负责了,其实你也可以这样写:

if cd /home/xxxx/ ; then rm -rf *else echo "cannot change directory" 1>&2 exit 1

这是if的另一种用法。这样写,就要比刚才的好多了。不过其实这样写,也比较麻烦,其实你还可以这样来写:

cd /home/xxxx/ && rm -rf *

后续还有

猜你喜欢

转载自blog.csdn.net/u011164819/article/details/79915630