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

Shell脚本如何过滤获取numberOfAccessSchedules>0的userAccessId

Shell脚本修改方案

直接通过jq原生能力完成字段过滤,无需串联grep、awk、sed等文本处理命令,既可以减少管道处理的性能损耗,也能避免文本匹配规则在JSON结构变动时失效。

核心修改逻辑

  • 保留原有鉴权接口调用获取access_token的逻辑无需改动
  • 调用useraccesses分页接口拿到JSON响应后,直接在jq阶段完成两个操作:
    • 遍历useraccesses数组下的所有条目,通过select()方法筛选出numberOfAccessSchedules字段值大于0的条目
    • 提取筛选后条目的userAccessId值,直接写入目标文件
  • 如果接口是分页返回,增加简单的翻页循环即可拉取全量符合条件的数据

替换后的完整核心代码

# 1. 鉴权获取token(替换成你原有的鉴权参数、接口地址即可)
ACCESS_TOKEN=$(curl -s -X POST "http://你的鉴权接口路径" \
  -H "Content-Type: application/json" \
  -d '{"username":"你的账号","password":"你的密码"}' \
  | jq -r '.access_token')

# 2. 初始化结果文件,清空旧内容
> alluseraccessId.txt

# 3. 分页拉取+过滤写入(如果是不分页接口,去掉循环直接单次调用即可)
PAGE=1
# 每页条数根据接口实际支持的参数调整
PAGE_SIZE=100

while true; do
  # 调用当前页接口
  RESP=$(curl -s -X GET "http://你的useraccesses查询接口路径?page=${PAGE}&pageSize=${PAGE_SIZE}" \
    -H "Authorization: Bearer ${ACCESS_TOKEN}")

  # 提取当前页符合条件的userAccessId追加写入文件
  echo "${RESP}" | jq -r '.useraccesses[] | select(.numberOfAccessSchedules > 0) | .userAccessId' >> alluseraccessId.txt

  # 判断是否到达最后一页,totalPages为接口返回的总页数字段,根据实际接口返回结构调整
  CURRENT_TOTAL=$(echo "${RESP}" | jq -r '.totalPages')
  if [ ${PAGE} -ge ${CURRENT_TOTAL} ]; then
    break
  fi
  PAGE=$((PAGE+1))
done

效果验证

以如下JSON响应结构为例:

{
  "totalPages": 1,
  "useraccesses": [
    {"userAccessId": "u001", "numberOfAccessSchedules": 0},
    {"userAccessId": "u002", "numberOfAccessSchedules": 3},
    {"userAccessId": "u003", "numberOfAccessSchedules": 1},
    {"userAccessId": "u004", "numberOfAccessSchedules": 0}
  ]
}

最终alluseraccessId.txt写入内容为:

u002
u003

完全符合仅提取numberOfAccessSchedules大于0条目对应ID的需求。

内容的提问来源于stack exchange,提问作者Dipesh Kumar Sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:01:43