GeekHub

Shell脚本异常处理

首先我们来做一个简单试验:

创建一个test.sh脚本,内容如下

#!/bin/bash
rm ./abc
touch ./abc

给test.sh脚本运行权限 ,执行脚本(执行路径下无abc文件),可以看到终端提示rm失败,但是还是创建了abc文件:

将test.sh修改为如下:

#!/bin/bash -e #此处加上-e选项
rm ./abc
touch ./abc

执行后可以看到终端提示rm失败,但是并没有创建abc文件:

这是因为当bash加上-e选项时,shell脚本中命令一旦执行失败,则脚本立即退出,不再执行后续命令。

对于大多数Shell脚本来说,如果其中一条命令执行失败,后面的命令继续执行可能会出现各种异常,因此加上-e选项往往是合理的。

但是如果脚本中某一条指令执行成功与否未知,需要尝试执行命令时,在Shell中可以用&&和||实现类似JAVA中的try…catch…的结构来尝试执行:

#!/bin/bash -e
CommandA || CommandB #当且仅当CommandA执行失败时才执行CommandB
CommandA && CommandB #当且仅当CommandA执行成功时才执行CommandB

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注