Shell脚本批量管理扫描配置文件:创建、提取ID与批量操作
完整自动化扫描配置文件管理流程(创建→提取ID→批量更新/删除)
作为经常搞API自动化的开发者,我把你的流程补全成了可直接运行的Shell脚本方案,每一步都做了细节处理,避免踩坑:
1. 批量创建扫描配置文件(POST请求)
假设你已经把要批量创建的配置数据存在batch_configs.json里(每行一个独立的配置JSON),用下面的循环就能批量发送POST请求:
#!/bin/bash # 批量创建扫描配置文件 API_BASE_URL="https://your-api-domain.com/api/scan-profiles" AUTH_TOKEN="your-auth-token-here" # 替换成实际的认证令牌 # 逐行读取配置并发送请求 while IFS= read -r config; do echo "正在创建配置: $config" curl -X POST "$API_BASE_URL" \ -H "Authorization: Bearer $AUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "$config" echo -e "\n---" done < batch_configs.json
提示:如果你的API支持一次性接收数组格式的批量配置,直接用
curl -d @batch_configs.json就能搞定,不用循环。
2. 获取所有配置文件并提取GUID到文本文件
先看一下GET请求返回的JSON示例(简化版):
{ "data": [ { "id": "a1b2c3d4-5678-90ef-ghij-klmnopqrstuv", "name": "扫描配置1", "settings": {...} }, { "id": "wxyz-1234-5678-abcd-efghijklmnop", "name": "扫描配置2", "settings": {...} } ] }
用curl拉取数据后,借助jq(轻量JSON处理工具,提前安装:sudo apt install jq或brew install jq)提取所有id字段,保存到scan_profile_ids.txt:
# 获取所有配置文件并提取ID curl -X GET "$API_BASE_URL" \ -H "Authorization: Bearer $AUTH_TOKEN" \ | jq -r '.data[].id' > scan_profile_ids.txt echo "已提取$(wc -l < scan_profile_ids.txt)个配置ID到scan_profile_ids.txt"
注意:如果你的API返回直接是数组(没有嵌套在
data下),把jq命令改成jq -r '.[].id'就行。
3. 批量执行PUT更新或DELETE删除操作
批量更新(PUT请求)
假设你要给所有配置统一修改扫描频率这类设置,用下面的循环:
# 批量更新扫描配置 UPDATE_PAYLOAD='{"scan_frequency": "daily", "enabled": true}' # 替换成实际的更新内容 while IFS= read -r profile_id; do # 跳过空行,避免无效请求 [[ -z "$profile_id" ]] && continue echo "正在更新配置ID: $profile_id" curl -X PUT "$API_BASE_URL/$profile_id" \ -H "Authorization: Bearer $AUTH_TOKEN" \ -H "Content-Type: application/json" \ -d "$UPDATE_PAYLOAD" echo -e "\n---" done < scan_profile_ids.txt
批量删除(DELETE请求)
如果要批量删除所有提取到的配置,把上面的PUT命令换成DELETE即可:
# 批量删除扫描配置 while IFS= read -r profile_id; do [[ -z "$profile_id" ]] && continue echo "正在删除配置ID: $profile_id" curl -X DELETE "$API_BASE_URL/$profile_id" \ -H "Authorization: Bearer $AUTH_TOKEN" echo -e "\n---" done < scan_profile_ids.txt
额外优化建议
- 错误捕获:可以在
curl命令后加|| echo "操作失败: $profile_id",方便排查问题 - 日志记录:把输出重定向到日志文件,比如
>> automation.log 2>&1 - 并发执行:如果API允许,用
xargs -P 5实现并发处理(注意别超过API的速率限制)
内容的提问来源于stack exchange,提问作者Maxim Shyrokyy




