2014-08-31 47 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; 

}

相关问题