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