我是Bash编程的新手,可能真的很傻.
基本上我正在编写一个脚本来ping我传入的IP地址,它会从传输的数据包中获取并返回错误或传递消息,具体取决于丢失的数据包数量.
但是每当我从终端运行脚本时,我都会收到消息 -
./ipGatewayCheck.sh: line 13: [: missing]'`
这是我的代码:
#!/bin/bash
healthy_status=0
warning_status=10
critical_status=100
for gateway in $@
do
RESULT=`ping -q -c 10 $gateway | grep 'packets transmitted' | awk '{print $6}' | tr -d "%"`
echo "$RESULT"
if [ $RESULT -eq $healthy_status ]; then
echo "No Issue - IP Address is pinging"
elif [ $RESULT -ge $warning_status && -le $critical_status ]; then
echo "Warning - Issue with packet loss on this IP Address"
elif [ $RESULT -eq $critical_status ]; then
echo "Critical - 100% packet loss on this IP Address"
fi
done
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
您需要使用[[and ]]以便&&在方括号内使用:
if [[ "$RESULT" -eq "$healthy_status" ]]; then
echo "No Issue - IP Address is pinging"
elif [[ "$RESULT" -ge "$warning_status" && "$RESULT" -le "$critical_status" ]]; then
echo "Warning - Issue with packet loss on this IP Address"
elif [[ "$RESULT" -eq "$critical_status" ]]; then
echo "Critical - 100% packet loss on this IP Address"
fi
Run Code Online (Sandbox Code Playgroud)
或者你也可以用((和))在BASH:
if (( RESULT == healthy_status )); then
echo "No Issue - IP Address is pinging"
elif (( RESULT == warning_status && RESULT < critical_status )); then
echo "Warning - Issue with packet loss on this IP Address"
elif (( RESULT == critical_status )); then
echo "Critical - 100% packet loss on this IP Address"
fi
Run Code Online (Sandbox Code Playgroud)