2014-10-01 55 views
1

我碰到了一个N​​agios检查脚本,这个脚本已经被某个已经离开我公司的人编写了,并且有一个我不明白它正在使用的操作员。 这是有关部分从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 
$ 

谢谢大家的帮助和信息!

+1

也许这是您的解决方案? http://stackoverflow.com/questions/19441521/bash-regex-operator – cslotty 2014-10-01 09:59:04

+0

我只是很难理解为什么它被特别用在这个脚本中......并且谢谢,这个主题中的信息也很有趣。 – 2014-10-01 10:05:20

回答

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,否则返回1。如果常规 表达式在语法上不正确,则条件表达式的 返回值为2.

+0

请检查我的编辑#1,谢谢。 – 2014-10-01 10:03:14

+0

查看我的更新以了解您的编辑#2。稍后将调查编辑#1。 – fedorqui 2014-10-01 10:12:56