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