如何在 Linux shell 脚本中显示 nc 返回值?
Posted
技术标签:
【中文标题】如何在 Linux shell 脚本中显示 nc 返回值?【英文标题】:How to display nc return value in Linux shell script? 【发布时间】:2017-07-11 15:55:15 【问题描述】:我在我的 Linux 框中使用nc
命令来检查端口是否正在监听;
这会显示成功消息:
nc -z 192.168.0.2 9000
这显示 0:
echo $?
我已将它组合在一个 shell 脚本 .sh 文件中,如下所示;
#!/bin/sh
nc -z 192.168.0.2 9000
echo $?
这显示1
而不是预期的0
。同样,如果我像下面这样修改我的脚本,它就可以工作;
#!/bin/sh
echo nc -z 192.168.0.2 9000
echo $?
但这里的问题是,它在一个like上显示成功消息,然后在下一行显示0。我不想要成功消息,我期待 0。这里出了什么问题,我该如何解决这个问题?
【问题讨论】:
***.com/questions/4922943/… 【参考方案1】:这个小脚本应该可以解决问题:
#!/bin/bash
SERVER=$1
PORT=$2
nc -z -v -G5 $SERVER $PORT &> /dev/null
result1=$?
#Do whatever you want
if [ "$result1" != 0 ]; then
echo port $PORT is closed on $SERVER
else
echo port $PORT is open on $SERVER
fi
用法:
./myscript.sh servername portnumber
例如:
./myscript www.google.com 80
www.google.com 80
port 80 is open on www.google.com
根据您使用的 nc 版本,您可能需要将 -G 调整为 -w,因此请尝试并找到最适合您的版本。
【讨论】:
【参考方案2】:您的脚本按我的预期工作。 (使用 nc 0.7.1 和 sh 4.4.12)
在命令行和使用 #!/bin/sh
的脚本中都可以
只是你的最后一个版本 - echo nc -z 192.168.0.2 9000
- 根本不执行 nc 而只是将其回显。尝试用任何东西替换nc
,例如ncc-1701
你就会明白我的意思了。
【讨论】:
以上是关于如何在 Linux shell 脚本中显示 nc 返回值?的主要内容,如果未能解决你的问题,请参考以下文章