请教Bash脚本中*0\ rejected*表达式的匹配逻辑与功能
嘿,我来帮你拆解这段Bash代码的逻辑,其实它比看起来要直观~
拆解Check_MK脚本里的这段Bash条件判断
首先,整行代码是Bash里的条件判断语句,用来检查变量REDISCOVER的内容是否同时满足两个匹配条件,只有两个条件都成立时,才会执行then后面的代码块。我们拆开来一步步看:
1. [[ ... ]] 是什么?
这是Bash里的扩展测试命令,比老式的[ ... ]功能更强——支持更灵活的字符串匹配、逻辑运算,还不用像[ ]那样对很多符号做额外转义,是现代Bash脚本里很常用的写法。
2. "$REDISCOVER" == *0\ rejected* 解析
"$REDISCOVER":用双引号把变量包起来,是为了避免变量内容里的空格、特殊字符导致脚本解析出错,这是写Bash脚本的好习惯。==:在[[ ]]的语境里,==不是普通的“等于”,而是模式匹配(类似shell里的文件名通配规则)。*0\ rejected*:这是具体的匹配规则:*:代表任意长度的任意字符(包括空字符),相当于正则里的.*但更简单。0\ rejected:这里的\是转义符,因为空格在Bash里是默认的分隔符,转义后能让0 rejected作为一个完整的子串被匹配。
所以这个规则的意思是:变量REDISCOVER的内容里,必须包含0 rejected这个子串(不管它在内容的开头、中间还是结尾)。
3. && 的作用
这是Bash里的逻辑与运算符,意思是只有它左右两边的条件都为真时,整个大条件才会成立。
4. 第二个条件 "$REDISCOVER" == *0\ removed*
和第一个条件逻辑完全一致,只是匹配的目标子串换成了0 removed——也就是检查变量内容里是否包含0 removed。
整句话的核心功能
结合你提到的Check_MK监控PowerDNS的场景,这段代码的意思是:当REDISCOVER变量记录的重新发现操作结果里,同时出现了0 rejected(没有被拒绝的资源)和0 removed(没有被移除的资源)时,才执行后续代码。大概率是用来判断这次服务资源重新发现的操作是成功且无异常的。
举个例子:如果REDISCOVER的内容是2 added, 0 rejected, 0 removed,条件就会成立;但如果内容是0 added, 1 rejected, 0 removed或者0 added, 0 rejected, 1 removed,条件都不成立。
内容的提问来源于stack exchange,提问作者Florius
相关产品推荐
相关产品推荐

