我正在设置Check_MK以监控PowerDNS。 我发现this script并且它运行正常。
但是,我在其中看到了*0\ rejected*
和*0\ removed*
:
if [[ "$REDISCOVER" == *0\ rejected* && "$REDISCOVER" == *0\ removed* ]]; then
我正在学习Bash脚本,但我以前从未见过这个。
有人可以解释它究竟是做什么的吗?
答案 0 :(得分:2)
在Bash ==
中使用[[ ... ]]
时,会执行pattern matching。在您的情况下,只有当"$REDISCOVER"
同时匹配模式*0\ rejected*
和*0\ removed*
时,测试才会通过。
模式*0\ rejected*
匹配以下字符串:
*
:前面有零个或多个字符; 0\ rejected
:包含字符串0 rejected
(反斜杠用于转义空格,因此它被视为模式的一部分); *
:后跟零个或多个字符。或者更简单地说,[[ "$REDISCOVER" == *0\ rejected* ]]
检查变量REDISCOVER
是否包含字符串0 rejected
。
同样适用于*0\ removed*
。
将使测试通过的REDISCOVER
的有效值示例为:
0 rejected0 removed # most simple case;
0 removed0 rejected # order does not matter;
...0 rejected...0 removed... # there can be arbitrary garbage before,
# between or after the two
答案 1 :(得分:1)
每个模式都匹配字符串中某处包含0 rejected
(或0 removed
)的任意字符串。反斜杠用于引用空格,优先于*0" "rejected
。引用整个字符串"*0 rejected*"
将无法正常工作,因为通配符将按字面处理,而不是匹配任意字符串。