我在我的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.这里有什么问题,我该如何解决这个问题?
答案 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
,你会明白我的意思。