使用嵌套管道命令编写 bash 条件

使用嵌套管道命令编写 bash 条件

以下 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

但什么都没有打印。它看起来正在等待更多输入。

答案1

你应该使用命令替换

if [ $(aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l) -eq 0 ]
then 
    echo FAILURE;
fi

或者在一行中:

if [ $(aws s3 ls s3://bucket/dir | grep _SUCCESS | wc -l) -eq 0 ]; then echo FAILURE; fi

更好的解决方案是“@steeldriver”建议使用 grep 的退出状态:

if aws s3 ls s3://bucket/dir | grep -q _SUCCESS; then echo FAILURE; fi

或者:

aws s3 ls s3://bucket/dir | grep -q _SUCCESS || echo FAILURE

相关内容