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

 

问题:

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

 

解决方案:

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

cd mytmp

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

 

讨论:

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

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

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值