关于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下. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |