데이터 스트림의 정규식

데이터 스트림의 정규식

내 데이터 스트림에 뭔가가 있는지 테스트하고 종료 코드를 실행하고 싶습니다.

다음과 같은 데이터 스트리밍을 제공하는 gammu 모니터를 사용합니다.

[root@MYSERVER ~]# gammu monitor
Press Ctrl+C to break...
Entering monitor mode...

Enabling info about incoming SMS    : No error.
Enabling info about incoming CB     : Some functions not available for your system (disabled in config or not written).
Enabling info about calls           : No error.
Enabling info about USSD            : No error.
SIM phonebook        :  42 used,  38 free
Dialled numbers      :   2 used,  28 free
Received numbers     :   0 used,  30 free
Missed numbers       :   0 used,   0 free
Phone phonebook      :  55 used, 945 free
ToDos                :   0 used, 353 free
Calendar             :  27 used, 353 free
Battery level        : 25 percent
Charge state         : battery connected, but not powered from battery
Signal strength      : -83 dBm
Network level        : 100 percent
SIM SMS status       : 0 used, 0 unread, 13 locations
Phone SMS status     : 1 used, 0 unread, 200 locations
Network state        : home network
Network              : 208 10 (SFR, France), LAC 6414, CID 0000AC99

내 Bash 스크립트에서 다음과 같은 작업을 수행할 수 있을 것 같습니다.

#!/bin/bash

gammu monitor |
tail -n 1 |
if[[ "$1"=="Press*" ]]
then
  echo "yes"
else
  echo "no"
fi;

예를 들어, 배터리 충전선을 확인하려면 숫자가 > 50(0번 콘센트), 1번 콘센트는 25번, 2번 콘센트는 25번으로 숫자가 표시됩니다. Atm, 첫 번째 줄이 다음으로 시작하는지 테스트하고 싶었지만 Press종종 작동하지 않습니다!

gammu monitor대상: Nagios 이 스크립트를 플러그인으로 사용하여 올바른 값이 반환되는지 확인 하고 그렇지 않은 경우 warning또는 로 이동하세요 critical.

답변1

이 예에서 나는 무슨 일이 일어나고 있는지에 대한 더 명확한 아이디어를 제공하려고 노력하고 있습니다. 스크립트를 조금만 가지고 놀면 원하는 결과를 얻을 수 있습니다.

#!/bin/bash
obtain_level=$(gammu monitor | awk '/Battery level/{print $4}') 
 if (( obtain_level <= 25 )) 
  then 
    echo "less than 25"
 elif (( obtain_level >= 26 || obtain_level <= 50 )) 
 then 
   echo "between 25 and 50" 
 else 
   echo "good" 
 fi

답변2

그냥 사용하십시오 grep:

gammu monitor 2>&1 | grep -e "Battery level" | tr -s " " | cut -f 4 -d" "

그러면 수치적인 백분율이 제공됩니다.

그런 다음 명령을 래핑하여 변수로 사용할 수 있습니다.

level=$(gammu monitor 2>&1 | grep -e "Battery level" | tr -s " " | cut -f 4 -d" ")
if [[ $level -ge 50 ]]; then
    exit 0
elif [[ $level -ge 25 ]]; then
    exit 1
else
    exit 2
fi

내 이해는 gammu monitor해당 메시지를 표시한 후 종료된다는 것입니다.

답변3

gammu monitor | awk '/^Battery level/{exit($4 < 25 ? 2 : $4 <= 50)}'

위에서 사용된 것은condition ? true-part : false-part삼항 연산자다양한 언어(C, Perl, Java 등)에서 발견됩니다. If $4 < 25, then return 2 else 논리식의 결과를 반환합니다 $4 <= 50(true이면 1, 그렇지 않으면 0).

답변4

모두 감사합니다. 이것이 최종 해결책입니다 :)

#!/bin/bash

battery=$(gammu monitor 2>&1 | grep -e "Battery level" | tr -s " " | cut -f 4 -d" " | tail -n 1)
echo $battery
if [[ $battery -ge 50 ]]; then
    # Exit 0 = OK
    echo OK
    exit 0
elif [[ $battery -ge 30 ]]; then
    # Exit 1 = WARNING
    echo WARNING
    exit 1
elif [[ $battery -ge 0 ]]; then
    # Exit 2 = CRITICAL
    echo CRITICAL
    exit 2
else
    # Exit 3 = Unknown
    echo UNKNOWN
    exit 3
fi

관련 정보