首页 > 解决方案 > 遍历 bash 中 curl 请求的列表

问题描述

我有一个发送 curl 请求并显示响应的 bash 脚本。

    #!/bin/bash

token=$(curl -k -X GET \
'https://v.mytesting.io/oauth/token?grant_type=password&username=user1&password=123' \
-H 'Authorization: Basic 12345678' \
-H 'Host: v.mytesting.io.io')
v=$( jq -r ".access_token" <<<"$token" )

ts=$(curl -k -X POST \
https://timeseries.mytimeseries.io/v5/time_series/query \
-H 'Authorization: Bearer '"$v" \
-H 'Content-Type: application/json' \
-H 'Host: timeseries.mytimeseries.io' \
-H 'tenant: 123-123-123' \
-d '{"operation" : "raw","responseFormat" : "kairosDB","startTime": "1d-ago","stopTime": "now","tagList" : [ {"tagId" : "V.S.23164117.AVG.10M"}]}')


p=$(jq '.queries[].sample_size, .queries[].results[].name' <<<"$ts")
echo "$p"

我当前的输出只是一个值和 tagId 的名称。我的查询只允许 1 个 tagId(您可以在上面看到)

我希望能够设置 tagId 的列表。然后,当我运行这个脚本时,它应该遍历 tagId 的列表并执行 curl 请求,用列表中的每个值替换 VS23164117.AVG.10M。然后将整个结果列表输出到文件中。

list 会是这样 - (我希望能够将此列表输入到一个单独的文件中,并且 bash 脚本会调用该文件。有时这个列表可能有几百行。

输出会像这样。

感谢您的任何帮助

标签: bashloopscurl

解决方案


您可以使用小脚本遍历标签列表。我不是 100% 干净的输出格式。您可以更改“回声”以匹配所需的格式。

请注意对引号的细微更改以允许在正文中进行变量扩展。

标签将存储在一个文件中,例如 tags.txt

V.S.23164117.AVG.10M
V.S.23164118.AVG.10M
V.S.23164119.AVG.10M

脚本将使用该文件

#! /bin/bash
   # Use user defined list of tags
tags=tags.txt
token=$(curl -k -X GET \
'https://v.mytesting.io/oauth/token?grant_type=password&username=user1&password=123' \
-H 'Authorization: Basic 12345678' \
-H 'Host: v.mytesting.io.io')
v=$( jq -r ".access_token" <<<"$token" )

for tag in $(<$tags) ; do
ts=$(curl -k -X POST \
https://timeseries.mytimeseries.io/v5/time_series/query \
-H 'Authorization: Bearer '"$v" \
-H 'Content-Type: application/json' \
-H 'Host: timeseries.mytimeseries.io' \
-H 'tenant: 123-123-123' \
-d '{"operation" : "raw","responseFormat" : "kairosDB","startTime": "1d-ago","stopTime": "now","tagList" : [ {"tagId" : "'"$tag"'"}]}')

    p=$(jq '.queries[].sample_size, .queries[].results[].name' <<<"$ts")

    echo "$tag $p"
done

推荐阅读