如何在Linux shell脚本中显示nc返回值?

时间:2017-02-21 20:26:32

标签: linux bash shell netcat

我在我的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 $?

但问题是,它显示成功消息,然后在下一行显示0。我不想要成功的消息,我期待着0.这里有什么问题,我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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,以便进行实验并找到最适合您的。

答案 1 :(得分:0)

您的脚本按预期方式运行。 (使用nc 0.7.1和sh 4.4.12)

两者都在命令行和使用#!/bin/sh

的脚本上

只是你的最后一个版本 - echo nc -z 192.168.0.2 9000 - 根本没有执行nc,只是回应它。尝试用任何内容替换nc,例如ncc-1701,你会明白我的意思。