Bash:如何将命令转换为数字结果,然后将其与运算符进行比较

Bash:如何将命令转换为数字结果,然后将其与运算符进行比较,bash,if-statement,grep,operators,Bash,If Statement,Grep,Operators,我试图在日志文件上执行一个单词计数命令,如果该文件有“error”字符串,我想采取一些措施,但我似乎无法正确地将grep to word count命令转换为实数,因此它可以正确地与大于零的值进行比较。到目前为止,有几个变体,条件语句总是正确的 if((grep-Ei“error”myfile.log | wc-l))>0;然后回波1;否则为0;fi首先,您可以根据程序的退出代码编写条件。 如果grep找到匹配行,它将成功退出: if grep -qEi "error" myfile.log;

我试图在日志文件上执行一个单词计数命令,如果该文件有“error”字符串,我想采取一些措施,但我似乎无法正确地将grep to word count命令转换为实数,因此它可以正确地与大于零的值进行比较。到目前为止,有几个变体,条件语句总是正确的


if((grep-Ei“error”myfile.log | wc-l))>0;然后回波1;否则为0;fi

首先,您可以根据程序的退出代码编写条件。 如果
grep
找到匹配行,它将成功退出:

if grep -qEi "error" myfile.log; then echo 1; else echo 0; fi
我添加了
-q
标志以不打印匹配行,因为您可能不需要它


我强烈建议使用上述解决方案,不使用
wc
。 但是为了完整起见,这里有一些关于比较数字的不同方法的更多解释

比较数字的一种方法是在
[…]
中使用
-gt
(“大于”):

if [ $(grep -Ei "error" myfile.log | wc -l) -gt 0 ]; then echo 1; else echo 0; fi
您可以在
帮助测试
中阅读
[…]
中的其他运算符

或者在
(…)
中使用算术上下文:

注意,在这两个示例中,我都包装了
grep…|wc-l
$(…)
子shell中捕获输出。
您编写的语法不正确。

我相信
grep
如果找到字符串,将提供0(成功)的退出状态,如果没有,则提供1(错误)。所以你不需要字数。
if (($(grep -Ei "error" myfile.log | wc -l) > 0)); then echo 1; else echo 0; fi