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



我正在尝试对日志文件执行字数统计命令,如果该文件有"错误"字符串,我想采取一些措施,但我似乎无法正确将 grep 到字数统计命令转换为实数,因此它可以正确与大于零进行比较。 到目前为止,有几种变体,条件语句始终为真。

if ((grep -Ei "error" myfile.log | wc -l)) > 0; then echo 1; else echo 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

您可以在help test中阅读有关[ ... ]内其他运算符的信息。

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

if (($(grep -Ei "error" myfile.log | wc -l) > 0)); then echo 1; else echo 0; fi

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

相关内容

  • 没有找到相关文章

最新更新