2017-02-21 156 views
1

我在下面的Linux機器中使用nc命令來檢查端口是否正在偵聽;如何在Linux shell腳本中顯示nc返回值?

這將顯示成功消息:

nc -z 192.168.0.2 9000 

這將顯示0:

echo $? 

我曾經在一個外殼腳本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

http://stackoverflow.com/questions/4922943/test-from-shell-script-if-remote-tcp-port-is-open – Dan

回答

0

您的腳本對我來說按預期工作。 在命令行(使用NC 0.7.1和4.4.12 SH)

兩個,以及使用#!/bin/sh

只需將您的最後一個版本的腳本 - echo nc -z 192.168.0.2 9000 - 不執行NC都只是它相呼應出。嘗試用任何東西替換nc,例如ncc-1701,你會明白我的意思。

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,所以試驗一下,找到最適合你的工具。