一个&&命令引发的惨案

本文探讨了一位用户在使用Shell脚本时遇到的问题,即多个命令串联使用时,因某一命令未输出而导致后续命令无法执行的情况。通过分析,发现原因是grep命令在未找到匹配项时会返回非零状态,导致使用&&连接的后续命令不被执行。最终,通过将&&替换为分号解决了问题。

背景:我用一条命令获取每台机器的日志,命令如下:

[root@localhost scripts]# grep -13 `date -d yesterday +%d-%b-%Y` /var/log/php/php_errors.log > /tmp/$HOSTNAME-PhpErrorLog-`date  -d yesterday +%Y%m%d`.log && grep -13 `date -d yesterday +%d-%b-%Y` /var/log/php/slow.log > /tmp/$HOSTNAME-slowlog-`date  -d yesterday +%Y%m%d`.log && grep `date -d yesterday +%Y/%m/%d` /var/log/nginx/8082_web_error.log.1 > /tmp/$HOSTNAME-Api_Log-`date -d yesterday +%Y%m%d`.log && tar -czf  /tmp/${HOSTNAME}_`date -d yesterday +%Y%m%d`.tar.gz  /tmp/${HOSTNAME}-* && sz /tmp/${HOSTNAME}_`date -d yesterday +%Y%m%d`.tar.gz && rm /tmp/${HOSTNAME}*

 

但这个命令在一台机器上没有任何的反应,然后我就手动执行每一条命令,成功了

 

但合起来执行一直没输出

 

解决:

 

发现输出的php_errorlog文件是空的,、tmp文件夹也只生成了一个文件

猜想是第一条命令没有执行成功,导致后面命令没有执行

测试了下果然如此

测试是否grep匹配不到数据就返回非0

 

果然如此,

所以解决方案,将前面几个&&换成分号

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值