如何在 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 返回值?的主要内容,如果未能解决你的问题,请参考以下文章

linux下各种反弹shell脚本

奇技淫巧linux下各种反弹shell脚本

Linux 反弹 Shell

shell脚本:如何显示某个文件的第一行

linux shell脚本怎么写监控远程80端口是不是开启?

linux之shell脚本