您的位置:首页 > 运维架构 > Shell

【BASH】判断命令是否成功执行

2009-04-27 13:08 281 查看
问题:
需要在成功执行某个命令之后执行一个命令。比如,你需要进入某个目录,删除其中所有的文件,但是如果cd命令失败,你就不去执行删除的动作(比如权限不允许,或者你把目录的名字输入错误)

解决方案:
可以使用cd命令的返回值($?)并结合if语句进行判断。
cd
mytmp

if
(( $? )); then rm * ; fi


讨论:
很明显,直接输入命令的时候,是不需要进行这个判断的。cd的所有错误信息都一目了然的时候,你肯定不会去执行rm操作。但是脚本就是另外一回事情了,如果你不期望删除你工作目录的文件,那么检测就是必须的了。
比如你在某个没有mytmp的目录执行了脚本,cd命令会失败,有了这个判断,当前的目录会保持原样。如果没有这个if判断,脚本会直接执行下面的语句,rm
*会删除当前目录所有的文件。
那么$?是如何得到的呢?它是命令的返回值,对c程序员来说,这个值也就是赋给exit函数的参数,比如exit(4)会返回4.对于脚本来说,0认为是成功,非零认为是失败。
在编写脚本的时候,你会期望你的脚本返回正确的值,从而,$?会正确的设置,如果你不这么做,这个值会保留最后一个命令的返回值,这应该不是你期望的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: