【问题标题】:bash script checking open port | checking for specific string in output of command [duplicate]bash 脚本检查开放端口 |检查命令输出中的特定字符串[重复]
【发布时间】:2020-10-22 16:35:16
【问题描述】:
if [[ $(timeout 3 nc -zv 172.31.3.2 88) = *open* ]];then
        echo "Port Open"
else
        echo "Port Closed"
fi

我正在尝试检查一个端口是否打开,如果它打开,它会打印出打开的端口。

我正在使用 netcat 来做到这一点。

它应该返回类似:[172.31.3.2] 88 (kerberos) open

我正在尝试检查输出中的那个 open 字符串,然后如果它说它将返回 port open

由于某种原因,它只是不断返回:

[172.31.3.2] 88 (kerberos) open
Port Closed

【问题讨论】:

  • 只有写入 stdout 而非 stderr 的内容才会被命令替换捕获。

标签: bash


【解决方案1】:

如果您在终端中看到输出,则它被写入stderr,因为stdout 已被命令替换捕获。所以你需要将stderr重定向到stdout,这样你也可以捕获它。

if [[ $(timeout 3 nc -zv 172.31.3.2 88 2>&1) = *open* ]];then
        echo "Port Open"
else
        echo "Port Closed"
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-11
    • 2017-04-01
    • 2013-03-02
    • 2017-02-23
    • 2021-11-16
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多