Function netcat命令的结果与字符串不匹配

Function netcat命令的结果与字符串不匹配,function,shell,netcat,Function,Shell,Netcat,我想测试哪个远程端口是开放的,以知道我是否必须连接telnet VNC Teamviewer或其他什么 我将有大约10个端口要测试,我正在为它编写一个脚本。 在这一点上,我提供了以下代码: function testPort(){ res=`nc -v $1 $2 < /dev/null` echo $res if [[ "$res" == *refused* ]] then echo "ref

我想测试哪个远程端口是开放的,以知道我是否必须连接telnet VNC Teamviewer或其他什么

我将有大约10个端口要测试,我正在为它编写一个脚本。 在这一点上,我提供了以下代码:

function testPort(){
        res=`nc -v $1 $2 < /dev/null`
        echo $res
        if [[ "$res" == *refused* ]]
        then
                echo "refused"
                return 0
        else
                echo "accepted"
                return 1
        fi

}

if test -z "$1"
then
        echo "What's the adress?"
        read IP
else
        IP="$1"
fi

testPort $IP 80

但在任何情况下,我都会显示“已接受”。我不明白为什么。有人能解释一下我的错误在哪里吗?

这是因为netcat将其消息写入标准错误,而不是标准输出。因此,变量
res
为空,并且与
*拒绝*
不匹配

您在控制台上看到netcat消息的原因不是因为
echo$res
行,而是因为您没有捕获标准错误,所以它将进入控制台

如果将
testPort
的第一行更改为:

    res=`nc -v $1 $2 < /dev/null 2>&1`
res=`nc-v$1$2&1`

它应该可以工作。

这是因为netcat将其消息写入标准错误,而不是标准输出。因此,变量
res
为空,并且与
*拒绝*
不匹配

您在控制台上看到netcat消息的原因不是因为
echo$res
行,而是因为您没有捕获标准错误,所以它将进入控制台

如果将
testPort
的第一行更改为:

    res=`nc -v $1 $2 < /dev/null 2>&1`
res=`nc-v$1$2&1`

它应该会起作用。

很有魅力。没想到我对管道和重定向不太放心。谢谢,很有魅力。没想到我对管道和重定向不太放心。谢谢