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

如何在Shell脚本中编写循环:将指定命令针对变量i重复执行10次

在Shell脚本中实现10次循环执行指定命令

以下是两种常用的Shell循环写法,可让你的命令重复执行10次,每次替换jq表达式中的索引变量i:

方式1:C风格for循环(Bash专属)

这种写法直观,适合明确循环次数的场景:

# 循环索引i从0到9(共10次)
for ((i=0; i<10; i++)); do
  # 执行curl请求并提取对应索引的结果
  _RESULT=$(curl -sgG "${CURL_OPTS[@]}" --data-urlencode "query=${PROMETHEUS_QUERY}" "${PROMETHEUS_SERVER}/api/v1/query" | jq -r ".data.result[$i]")
  
  # 这里可以添加对_RESULT的处理逻辑,比如打印、写入文件等
  echo "第$((i+1))次循环结果: $_RESULT"
done

方式2:使用seq生成循环序列

这种写法兼容性更好,适合不支持C风格循环的Shell环境:

# 生成0到9的数字序列,循环10次
for i in $(seq 0 9); do
  _RESULT=$(curl -sgG "${CURL_OPTS[@]}" --data-urlencode "query=${PROMETHEUS_QUERY}" "${PROMETHEUS_SERVER}/api/v1/query" | jq -r ".data.result[$i]")
  
  # 处理结果示例
  echo "第$((i+1))次循环结果: $_RESULT"
done

更安全的jq变量传递方式

如果担心Shell变量解析冲突,可以用jq的--arg参数传递索引,避免直接拼接字符串:

for ((i=0; i<10; i++)); do
  _RESULT=$(curl -sgG "${CURL_OPTS[@]}" --data-urlencode "query=${PROMETHEUS_QUERY}" "${PROMETHEUS_SERVER}/api/v1/query" | jq -r --arg idx "$i" '.data.result[$idx]')
  
  echo "第$((i+1))次循环结果: $_RESULT"
done

注意事项

  • Prometheus返回的result数组是0索引,所以循环从0到9会提取前10个结果;如果你的需求是从1开始计数,需注意数组越界问题。
  • 每次循环都会发起一次curl请求,如果Prometheus返回的结果包含多个数据,也可以考虑一次性请求后用jq循环处理,减少网络请求次数(比如用jq '.data.result[]'遍历所有结果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:35:10