来自管道命令的脚本中的小于运算符

来自管道命令的脚本中的小于运算符

我正在使用 Ubuntu 18.04 并使用ansible.我有一个测试来看看是否有什么改变。本质上,如果 grep 后的行数“小于 2”。

我可以使用以下管道结构检索号码:

realm list | grep active-directory | wc -l

如何测试结果是否小于2?

答案1

if [ "$(realm list | grep -c -wF active-directory)" -lt 2 ]; then
    echo is less than 2
else
    echo is 2 or more
fi

grep可以算。在这里,我们使用该事实来计算包含单词 的行数active-directory

-c的选项使grep返回grep匹配的行数。该-F选项禁用正则表达式匹配,并改为grep使用字符串比较。

-w选项是非标准的,但普遍实施。它强制给定模式成为一个单独的单词,这意味着匹配必须在给定字符串的两侧都有非单词字符(或没有)。非单词字符是任何字符外部集合中的[[:alnum:]_]任何内容,即不是字母数字或下划线的任何内容。这意味着如果与 一起使用,active-directory3则不会匹配,也不会。active-directory-wgrepinactive-directory

答案2

你也可以这样做

if realm list | awk '/active-directory/ && n++ {exit 1}'; then
  echo less than 2
else
  echo 2 or more
fi

我们告诉awk它一旦发现第二行包含active-directory.当我们已经得到答案时,这就节省了寻找所有匹配项的麻烦。

答案3

感谢 @ctrl-alt-delor 的解决方案如下:

test $(realm list | grep active-directory | wc -l) -lt 2 && echo true || echo false

test是一个标准POSIX 实用程序

相关内容