如何通过curl+jq获取服务器列表并关联查询运行状态
实现服务器状态批量查询并关联描述信息
1. 获取服务器主机名与描述信息
首先通过以下curl结合jq命令获取服务器列表的主机名和描述:
curl -sX GET https://xx.com | jq -r '.res.out[].server // empty | {host: .host, description: .description}'
返回的JSON结果如下:
{ "host": "server1", "description": "server 1" } { "host": "server2", "description": "server 2" } { "host": "server3", "description": "server 3" }
2. 构建映射结构并批量查询状态
在Bash中可以使用关联数组存储主机名与描述的映射关系,再循环遍历数组查询每个服务器的运行状态。修改后的脚本如下:
#!/bin/bash # 初始化关联数组 declare -A server_desc_map # 从接口获取数据并填充关联数组 while IFS=$'\t' read -r host desc; do server_desc_map["$host"]="$desc" done < <(curl -sX GET https://xx.com | jq -r '.res.out[].server // empty | "\(.host)\t\(.description)"') # 循环遍历数组,查询每个服务器状态 for host in "${!server_desc_map[@]}"; do desc="${server_desc_map[$host]}" # 首字母大写处理,匹配期望输出格式 echo "HOST: $(tr '[:lower:]' '[:upper:]' <<< ${host:0:1})${host:1}" echo "Description: $(tr '[:lower:]' '[:upper:]' <<< ${desc:0:1})${desc:1}" status=$(curl -sX GET https://xx.com/servers/$host | jq -r '.specInfo.resul.out[].server.operationalStatus // empty') echo "$status" done
脚本说明:
- 用
jq将每个服务器的host和description以制表符分隔输出,方便read命令读取解析 - 关联数组
server_desc_map实现主机名到描述的一一映射 - 循环遍历数组时,同步取出对应描述并调用状态查询接口
- 通过
tr命令实现首字母大写,匹配期望的输出格式
3. 最终输出效果
执行脚本后,会得到如下格式的输出:
HOST: Server1 Description: Server 1 RUNNING HOST: Server2 Description: Server 2 RUNNING HOST: Server3 Description: Server 3 NOT RUNNING
内容的提问来源于stack exchange,提问作者esefe sgrgrz
相关产品推荐
相关产品推荐

