最可靠的方式是用 jq 解析 json,shell 不原生支持 json,正则或 awk 易出错;需先安装 jq 并验证版本,再用 curl 获取响应、jq 校验格式,仅在 http 状态码为 200 时解析,根据 api 结构定位 ip 字段路径,最后安全提取赋值并做空值校验。

直接用 jq 解析最可靠,Shell 本身不原生支持 JSON,硬写正则或 awk 容易出错,尤其当字段含换行、引号、嵌套时。
确认 jq 工具已安装
大多数 Linux 发行版需手动安装:
- Ubuntu/Debian:
sudo apt install jq - CentOS/RHEL:
sudo yum install jq或sudo dnf install jq - macOS(Homebrew):
brew install jq
运行 jq --version 验证是否可用。没装就无法继续——别试图用 grep 或 sed 替代,那不是在解析 JSON,是在碰运气。
获取并验证 API 返回数据结构
先用 curl 获取原始响应,并检查格式是否为合法 JSON:
response=$(curl -s "https://api.example.com/v2/servers/12345")
加 -s 静默请求,避免进度条干扰;用 jq 校验并美化输出:
echo "$response" | jq '.'
如果报错 parse error,说明返回不是 JSON(可能是 HTML 错误页、空响应或未授权),此时应先检查 URL、认证头(如 -H "Authorization: Bearer xxx")或状态码:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
http_code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
只在 $http_code 为 200 时才继续解析。
定位 IP 字段路径并提取动态地址
云主机的 IP 通常在 networks、addresses 或 public_ip 等字段下,结构因厂商而异。常见模式:
- OpenStack 类:
.addresses."public"[0].addr或.networks.public[0] - 阿里云:
.Instance.NetworkInterfaces.NetworkInterface[0].PrimaryIpAddress - 腾讯云:
.Instance.PublicIpAddresses[0] - 通用兜底(找第一个非内网 IPv4):
jq -r '.[] | select(.ip_address) | .ip_address' | head -n1
建议先用 jq 'keys' 或 jq 'path(.. | select(type=="string" and test("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")))' "$response" 辅助定位,但更推荐人工看一次 jq '.' 输出,再写精准路径。
在脚本中安全提取并赋值使用
不要直接用命令替换赋值,要捕获失败情况:
ip=$(echo "$response" | jq -r '.addresses."public"[0].addr // empty') if [[ -z "$ip" ]] || [[ "$ip" == "null" ]]; then echo "警告:未提取到公网 IP" >&2 exit 1 fi echo "当前动态 IP:$ip"
// empty 是 jq 的默认空值 fallback,避免输出 null 字符串;-r 去掉引号;判断 -z 和 == "null" 双保险。后续可配合 ping -c1 "$ip" 或 ssh user@"$ip" 自动化运维。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










