意外令牌附近的Bash /语法错误`}'

时间:2014-08-31 07:36:20

标签: bash

我在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 `}'
`}'

我不明白为什么:}正在关闭该功能的范围。

2 个答案:

答案 0 :(得分:5)

您需要done行来终止while行与fi行和右大括号}之间的循环。

但是,我不完全确定为什么你甚至拥有<{em} {/ 1>}循环,因为无论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 } )。

但是,我会假设您仍处于开发/测试阶段,而不是您疯狂的可能性: - )

答案 1 :(得分:1)

done循环末尾的while缺失

      ....
      break
    fi
 done;

}