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下。