快速业务通道

关于shell脚本什么时候会异常退出

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-15

  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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号