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

如何在Bash脚本中实现TCP消息收发及响应判断?

Bash实现TCP消息收发与响应判断脚本

下面是完整的Bash脚本实现,包含TCP消息发送、响应接收、结果判断及命令执行逻辑:

#!/bin/bash

# 替换为实际的服务器IP和端口
SERVER_IP="192.168.1.100"
SERVER_PORT="8080"
# 指定需要执行的命令
TARGET_CMD="echo '执行自定义命令'"

# 打开TCP连接,绑定到文件描述符3
exec 3<>/dev/tcp/${SERVER_IP}/${SERVER_PORT}

# 发送指定消息
echo -n "REMOTE QCH" >&3

# 读取服务器响应(假设响应为单行)
read -r response <&3

# 关闭TCP连接
exec 3>&-

# 解析响应中斜杠后的数字(如从"@QCH OK 01/14"提取14)
suffix=$(echo "$response" | awk -F '[ /]' '{print $NF}')

# 判断数字是否大于01(用10#强制十进制,避免0开头被识别为八进制)
if (( 10#$suffix > 10#01 )); then
    echo "响应后缀数字 $suffix 大于01,执行指定命令..."
    # 执行目标命令
    eval "$TARGET_CMD"
else
    echo "响应后缀数字 $suffix 不大于01,不执行命令"
fi

关键说明:

  • TCP连接处理:用exec 3<>/dev/tcp/IP/PORT同时打开读写通道,解决单纯写入无法读取响应的问题,操作完成后用exec 3>&-关闭连接。
  • 响应解析:通过awk以空格和斜杠为分隔符,提取最后一个字段作为需要判断的数字。
  • 数值比较:用10#前缀强制按十进制解析数字,防止类似08、09这类数字被Bash识别为无效八进制数。
  • 命令执行:将需要执行的命令存放在TARGET_CMD变量中,用eval执行,可替换为任意合法的Shell命令或脚本路径。

注意事项:

  • 确保运行脚本的环境使用Bash(而非sh),因为/dev/tcp是Bash的内置特性,其他Shell可能不支持。
  • 如果服务器响应为多行,可将read改为循环读取(如while read -r line; do ... done <&3),根据实际情况调整。
  • 可添加超时处理逻辑,比如用timeout命令包裹TCP操作,避免脚本长时间挂起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:30:53