用于检查开放端口的简单 bashscript

t3n*_*ngu 2 linux bash

我在 bash 中编写了这个脚本:

probe='nc -zv localhost 19997'
output=' grep -c 'succeeded' $probe'
if [ $output == '0' ]
then
     echo 'Client online'
else
     echo 'Offline'
fi
Run Code Online (Sandbox Code Playgroud)

该脚本的目的是通过 netcat 检查客户端是否通过反向 ssh 连接到端口 19997 上的我的服务器,如果这是检测器,则打印一条肯定消息。nc 会打印

 Connection to localhost 19997 port [tcp/*] succeeded!
Run Code Online (Sandbox Code Playgroud)

如果它检测到客户端并且我只想将“成功”作为已建立连接的关键字进行 grep,并通过 grep 的退出代码触发 if 语句。但是当我运行这个脚本时,我得到:

test.sh: line 3: [: too many arguments
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

jes*_*e_b 9

您可以像这样直接测试命令的结果:

if ( nc -zv localhost 19997 2>&1 >/dev/null ); then
    echo 'Online'
else
    echo 'Offline'
fi
Run Code Online (Sandbox Code Playgroud)

子外壳( ... )不是必需的,但我喜欢在进行这样的清洁测试时使用它们。

有关退出代码和测试的更多信息,请参阅: