You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本连接检测需求:telnet成功跳过netcat,双失败需报错

改进后的Bash端口检测脚本

需求实现

脚本优先通过telnet检测指定host:port的连通性:

  • telnet连接成功则直接输出结果,跳过netcat检测
  • telnet连接失败或未安装时,自动尝试netcat检测
  • 两者均检测失败时,输出错误信息并终止脚本

修改后的完整脚本

#!/bin/bash
read -p "请输入主机IP地址: " REMOTEHOST
read -p "请输入端口号: " REMOTEPORT
TIMEOUT=5

# 执行telnet检测,屏蔽冗余输出并捕获退出状态码
echo quit | timeout --signal=9 $TIMEOUT telnet "$REMOTEHOST" "$REMOTEPORT" >/dev/null 2>&1
TELNET_EXIT=$?

if [ $TELNET_EXIT -eq 0 ]; then
    echo "已成功连接到 ${REMOTEHOST}:${REMOTEPORT} (通过telnet)"
elif command -v nc >/dev/null 2>&1; then
    # 尝试netcat检测
    if nc -w $TIMEOUT -z "$REMOTEHOST" "$REMOTEPORT"; then
        echo "已成功连接到 ${REMOTEHOST}:${REMOTEPORT} (通过netcat)"
    else
        echo "错误:无法连接到 ${REMOTEHOST}:${REMOTEPORT},telnet和netcat检测均失败" >&2
        exit 1
    fi
else
    echo "错误:无法连接到 ${REMOTEHOST}:${REMOTEPORT},telnet检测失败且未找到netcat工具" >&2
    exit 1
fi

关键修改说明

  • 简化输入流程:用read -p合并提示语与输入命令,更简洁
  • 屏蔽冗余输出:将telnet的输出重定向到/dev/null,避免打印无关的连接日志
  • 捕获退出状态:通过TELNET_EXIT=$?获取telnet的执行结果,0表示连接成功
  • 工具存在性检查:用command -v nc判断netcat是否安装,避免执行不存在的命令
  • 错误处理:当两种工具都无法成功连接时,将错误信息输出到标准错误流(>&2),并以非0状态码exit 1终止脚本,方便外部调用判断执行结果
  • 变量安全:给REMOTEHOST和REMOTEPORT加上双引号,避免包含特殊字符时出现语法错误

内容的提问来源于stack exchange,提问作者Vortex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:54:09