Linux入门教程:关于shell脚本何时异常退出

shell只有在遇到错误以及执行到exit的时候才会退出脚本,不然就一直在执行,有循环就把循环执行完并继续下去

那么shell在遇到哪些错误的时候会跳出执行呢?

我的理解是,在语法上遇到的错误时shell肯定会退出,而语法上没有错误,但是执行起来有错误时,shell是不会退出的(这里来看一种情况:

cd /app/data/download

rm -rf *

在 脚本里面如果有这样的命令,则我们假设现在/app/data/里面没有这个download的文件夹,执行这个命令虽然有报错,但是脚本是不会退出去 的,而是继续执行“rm -rf *”这个可怕的命令,那么执行脚本是在哪个路径下面呢?如果是在根目录下,那么这个系统就挂了,不仅挂了,连数据都没有了,这是多么可怕啊!)

简单说,当我们用

sh/ksh -n filename.sh

没有错误时,则shell执行起来就不会因为遇到错误而跳出,其跳出的条件要么是执行到exit 要么是执行完整个脚本,而实际上

当执行完整个脚本后shell是默认执行了exit的,并且返回值是0

这里注意,shell脚本执行完后的返回值即$?的值是由shell脚本里面最后一个命令执行是否成功来决定的。

if[ ];then

。..

else

。..

fi

这样的脚本里面,如果判断条件失败而执行else后面的内容时,如果没有遇到exit则脚本并不会退出,而会继续执行下去。

所以这里要想好要不要exit, 这个由业务逻辑决定!

当一个脚本里面有很多命令,且还包含其他脚本时,有没有遇到这两种情况:

一,脚本从头到尾一个命令接一个命令的执行,直到最后执行完脚本退出

二,脚本执行时很快就退出了,但是脚本的任务并没有立即就完成,而是仍在系统里面执行。

这个只跟脚本里面有没有把命令或者其他脚本放在后台去执行有关,如果有,则执行该命令或者脚本的父进程并不是这个脚本而是在系统的init下。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25329.html