Magicpang

Tracking the Road

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

 

问题:

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

 

解决方案:

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

cd mytmp

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

 

讨论:

很明显,直接输入命令的时候,是不需要进行这个判断的。cd的所有错误信息都一目了然的时候,你肯定不会去执行rm操作。但是脚本就是另外一回事情了,如果你不期望删除你工作目录的文件,那么检测就是必须的了。

比如你在某个没有mytmp的目录执行了脚本,cd命令会失败,有了这个判断,当前的目录会保持原样。如果没有这个if判断,脚本会直接执行下面的语句,rm *会删除当前目录所有的文件。

那么$?是如何得到的呢?它是命令的返回值,对c程序员来说,这个值也就是赋给exit函数的参数,比如exit(4)会返回4.对于脚本来说,0认为是成功,非零认为是失败。

在编写脚本的时候,你会期望你的脚本返回正确的值,从而,$?会正确的设置,如果你不这么做,这个值会保留最后一个命令的返回值,这应该不是你期望的。

 

阅读更多
文章标签: bash 脚本 工作 c
个人分类: Bash Cook Tips
上一篇【BASH】同时执行多个命令
下一篇【BASH】使用更少的if语句
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭