以下bash命令:
aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l
打印:
0
我想要的是,当结果确实为0时,将FAILURE打印到终端。
这就是我尝试过的:
if [ aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l = 0]; then echo FAILURE; fi
但是什么都没有打印出来。看起来它正在等待更多的输入。
您根本不需要wc
。如果行计数为零,则意味着grep
没有产生输出,在这种情况下,它将具有非零退出状态。无论如何,if
语句只关心退出状态。
if ! aws ls s3://bucket/dir | grep -q _SUCCESS; then
echo FAILURE
fi
!
否定管道的退出状态(这是最左边故障的存在状态,否则为0(,这样您就不必编写类似的东西
if aws ls s3://bucket/dir | grep -q _SUCCESS; then
: # Do nothing
else
echo FAILURE
fi
grep -q
抑制其输出,因为您只关心退出状态,而不关心实际输出。
严格来说,如果不匹配,grep
的退出状态为1,如果实际存在错误,则为不同的非零值,通常为2。如果需要,则需要在运行命令后明确检查$?
的值。
aws ls s3://bucket/dir | grep -q _SUCCESS
case $? in
0) : ;;
1) echo FAILURE ;;
*) echo "Some other error" ;;
esac
怎么样:
if [ "$(aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l)" -eq 0 ]; then echo FAILURE; fi