2014-08-31 69 views
-2

我在bash以下代碼:猛砸附近意外的標記`/語法錯誤}」

check_port() 
{ 
    local host=${1} 
    local port=${2} 
    echo $host 
    echo $port 
    while true; do 
     if nc -w 5 -z 127.0.0.1 111 && nc -w 5 -z 127.0.0.1 5001 ; 
     then 
      echo -e "\a\n => Port at host is open" 
      break 
     else 
      echo -e "\a\n => Port at host is closed" 
      break 
     fi 
} 

出於某種原因,我得到以下錯誤:

syntax error near unexpected token `}' 
`}' 

我不明白原因:}正在關閉該功能的範圍。

+0

仰望'while'循環的語法將教你什麼是錯的腳本。 – user2719058 2014-08-31 19:34:55

回答

5

您需要一個done行來終止您的while循環,在fi一行和第一個大括號}之間。

不過,我並不完全確定爲什麼你甚至while true環無論if結果是否爲真或假,因爲你打破它。因此這是多餘的,除非你打算在某個時候改變其中一個塊的行爲。

如果你不規劃,你就用更簡單更好:

check_port() 
{ 
    local host=${1} 
    local port=${2} 
    echo $host 
    echo $port 
    if nc -w 5 -z 127.0.0.1 111 && nc -w 5 -z 127.0.0.1 5001 ; then 
     echo -e "\a\n => Port at host is open" 
    else 
     echo -e "\a\n => Port at host is closed" 
    fi 
} 

我也不能完全肯定傳入主機的理智和端口,然後忽略它們(而是使用帶有兩個硬編碼端口的localhost)。

不過,我會假設你仍然在開發/測試階段,而不是在while循環結束時,你已經走了的可能性瘋狂:-)

+0

對不起,我還處於開發階段。如果條件返回true,我將使用break。另外,我會拿出本地主機和端口。謝謝。 – 2014-08-31 07:56:10

1

done缺失

 .... 
     break 
    fi 
done; 

}

相關問題