bash - 遍历 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 脚本会调用该文件。有时这个列表可能有几百行。
- VS23164117.AVG.10M
- VS23164118.AVG.10M
- VS23164119.AVG.10M
- VS23164115.AVG.10M
- VS23164114.AVG.10M
输出会像这样。
- 值 tagId
- 值 tagId
- 值 tagId
- 100 VS23164117.AVG.10M
- ETC..
感谢您的任何帮助
解决方案
您可以使用小脚本遍历标签列表。我不是 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
推荐阅读
- typescript - 如何安装 Storybook 和 Vue Cli 3?
- tcl - 在 Buildroot 中安装 Tcl tk 二进制文件
- python - 除了在索引中使用 random.randint() 之外,我如何从 python 列表中选择随机字符串?
- ios - Xamarin.Forms:如何使 iOS 状态栏背景不透明黑色?
- scala - Spark Structured Streaming from Files on S3/Disk - 将批处理文件名添加到记录/行?
- php - php字符串替换字符后#
- javascript - 如何访问 XMLHttpRequest 插入的 Dom 元素?
- xamarin - 发布版本中未触发命令
- php - 如何从 Symfony 中的数据库/实体中删除表?
- intellij-idea - 检查信息:验证@ConfigurationProperties 设置。2018.3 IntelliJ 中的新功能