我想测试我的数据流中是否有东西,并执行退出代码。
我使用 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)、> 25 出口 1 和 < 25 出口 2。Atm,我只是想测试第一行是否以Press
but ofc it开头不起作用!
目标:Nagios 使用此脚本作为插件,检查是否gammu monitor
返回正确的值,如果没有,则转到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...仅举几例)。如果$4 < 25
,则返回 2 else 返回逻辑表达式的结果$4 <= 50
(真时为 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