Chinaunix首页 | 论坛 | 博客
  • 博客访问: 256595
  • 博文数量: 78
  • 博客积分: 1465
  • 博客等级: 上尉
  • 技术积分: 972
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-28 13:46
文章分类

全部博文(78)

文章存档

2012年(1)

2011年(9)

2010年(68)

我的朋友

分类:

2010-01-11 01:00:39

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下。
阅读(4638) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~