我已经碰到了Nagios检查脚本,该脚本是由已经离开我公司的人编写的,那里有一个操作员,我无法理解它的使用。 这是shell脚本的相关部分:
if [[ "$URL" =~ $ACTIVE ]] && [[ "$URL2" =~ $ACTIVE2 ]]; then
echo "OK: $HOST is ACTIVE in the Load Balancer"
exit 0
我的问题是:
这是=~
是什么?
我已经在互联网上检查了一下,发现它是按位"翻转操作数中的位"但是我不知道在哪里和如何使用它,你能详细说明吗?
编辑#1: 这是完整的脚本:
#!/bin/bash
#Purpose: Checks if proxy is active in the LB
#Date: May 09, 2011
#Variables
HOST=$1
URL=`wget --timeout=60 -w 3 -qO- http://$HOST:8080/proxy/keepalive?file=/workspace/temp/1`
URL2=`wget --timeout=60 -w 3 -qO- http://$HOST:8080/proxy/keepalive?file=/workspace/temp/1.txt`
ACTIVE="1"
ACTIVE2="ppp"
LOG="/tmp/PROXY-LB.log"
#Begin Code
if [ -z $HOST ]; then
echo "You must specify IPADDRESS (e.g. 68.67.174.34)"
exit 3
fi
if [[ "$URL" =~ $ACTIVE ]] && [[ "$URL2" =~ $ACTIVE2 ]]; then
echo "OK: $HOST is ACTIVE in the Load Balancer"
exit 0
else
echo "*** Problem: $HOST is out from the Load Balancer"
echo "`date`: *** HOST $HOST is out from the Load Balancer" >> $LOG 2>&1
exit 2
fi
#END
我的问题是,编码人员不能使用它(不使用~
)吗?
if [[ "$URL" = $ACTIVE ]] && [[ "$URL2" = $ACTIVE2 ]]; then
编辑#2: 以下是我尝试过的一些例子:
$ d="hello"
$ [[ "$d" =~ *ll* ]] && echo "yes"
$ [[ "$d" =~ he* ]] && echo "yes"
yes
$ [[ "$d" =~ *lo ]] && echo "yes"
$
编辑#3: 好的,我已经做了一些测试,我相信我现在明白了:
$ [[ "$d" =~ he* ]] && echo "yes"
yes
$ [[ "$d" =~ *lo ]] && echo "yes"
$ [[ "$d" =~ h* ]] && echo "yes"
yes
$ [[ "$d" =~ lo$ ]] && echo "yes"
yes
$ [[ "$d" =~ ^he ]] && echo "yes"
yes
$ [[ "$d" =~ [a-z]ll[a-z] ]] && echo "yes"
yes
$
感谢大家的帮助和信息!
答案 0 :(得分:1)
用于在字符串中进行比较。
if [[ "$URL" =~ $ACTIVE ]] && [[ "$URL2" =~ $ACTIVE2 ]]; then
检查$URL
是否包含变量$ACTIVE
的内容,以及$URL2
是否包含变量$ACTIVE2
的内容。
参见测试:
$ d="hello"
$ [[ "$d" =~ he* ]] && echo "yes"
yes
$ [[ "$d" =~ *ba* ]] && echo "yes"
$
$ [[ $d =~ .*ll.* ]] && echo "yes"
yes
在最后一个中,您必须正确指出正则表达式。它相当于使用==
和*ll*
。
$ [[ $d == *ll* ]] && echo "yes"
yes
来自man bash
- > 3.2.4.2 Conditional Constructs:
可以使用另外的二元运算符=〜 优先级为==和!=。当它被使用时,字符串为 操作员的权利被视为扩展的正则表达式 相应地匹配(如在正则表达式(3)中)。如果返回值为0 string匹配模式,否则为1。如果经常 表达式在语法上是不正确的,条件表达式是 返回值为2。