2014-09-23 1329 views
2

我是新來bash編程,也許是真的很傻。BASH語法錯誤 - [:缺少']」

基本上我寫一段腳本,將ping一個IP地址我通過,它會從它的數據包傳輸並返回一個錯誤或因丟失的數據包的數量通過的消息。

然而,每當我從終端運行腳本我不斷收到消息 -

./ipGatewayCheck.sh: line 13: [: missing]'`

這是我的代碼:

#!/bin/bash 

healthy_status=0 

warning_status=10 

critical_status=100 

for gateway in [email protected] 

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 

任何幫助將不勝感激。

+0

'$結果-ge $ warning_status && $ -le critical_status'被解釋爲'($結果-ge $ warning_status)&&(-le $ critical_status)'和第二部分意味着什麼......不知道這是你問題,但這是一個問題。此外,我不確定您的條件應以半列結尾,但我現在無法測試它 – 2014-09-23 09:22:34

+0

謝謝大家!它似乎工作正常!用Anubhava的方法! – McCourt2364 2014-09-23 09:29:39

回答

5

你需要爲了使用[[]]使用&&方括號中:

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 
3

如確診anubhava

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 

另外,您還可以在BASH使用(())answer,問題是,&&操作終止測試命令讓你用[沒有匹配]和您收到的錯誤消息。

有一個替代修復 - 更傳統的外殼編碼和便攜式比其他猛砸炮彈。 如果你想使用[,您可以選擇使用的-a結合(而非&&),或使用兩個單獨的測試:

elif [ "$RESULT" -ge $warning_status -a "$RESULT" -le "$critical_status" ]; then 

elif [ "$RESULT" -ge $warning_status ] && [ "$RESULT" -le "$critical_status" ]; then 

注意,我不得不添加第二"$RESULT";我還將變量放在雙引號內,以確保沒有任何意外。

+0

注意,POSIX標準認爲XSI擴展'-a'過時,使用''&&代替參加兩次測試建議。 – chepner 2014-09-23 12:41:29