2014-10-01 2 views
1

나는 이미 회사를 떠난 누군가가 작성한 Nagios 체크 스크립트에 부딪 쳤고 거기에 운영자가있어 사용법을 이해할 수 없다.= ~ 피연산자를 사용하는 방법?

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

+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* 만 사용하는 것과 같습니다. man bash에서

$ [[ $d == *ll* ]] && echo "yes" 
yes 

->3.2.4.2 Conditional Constructs :

추가 바이너리 연산자 = ~는 ==와 같은 우선 순위로 볼 수 있습니다 =!. 이 연산자를 사용하면 연산자의 오른쪽에있는 문자열은 확장 정규 표현식으로 간주되고 그에 따라 이 일치합니다 (regex (3) 에서처럼). 문자열이 패턴과 일치하면 반환 값은 0이고, 그렇지 않으면 1입니다. 일반 표현식이 구문 상 올바르지 않은 경우 조건식의 반환 값은 2입니다.

+0

제 편집 # 1을 확인해주세요. –

+0

편집 # 2에 대한 내 업데이트를 참조하십시오. 나중에 # 1 편집을 조사 할 것입니다. – fedorqui

관련 문제