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

Or *_*ith -2 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
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我收到以下错误:

syntax error near unexpected token `}'
`}'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么:}正在关闭函数的范围.

pax*_*blo 5

你需要done一行来终止你的while循环,fi在行和右括号之间}.

但是,我不完全确定为什么你甚至这个while true循环,因为无论if评估为true还是false,你都会打破它.因此它是多余的,除非你计划在某些时候改变其中一个块的行为.

如果你没有计划,那你就更容易做得更好:

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
}
Run Code Online (Sandbox Code Playgroud)

我也不完全确定传入主机和端口然后忽略它们的理智(而是使用localhost两个硬编码端口).

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