我正在使用 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
-w
grep
inactive-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 实用程序