Bash 用于从curl读取响应并在JSON响应的特定值上循环的Shell脚本
我正在创建一个shell脚本(.sh),并尝试从REST调用的JSON响应中读取特定值。下面是我通过调用RESTURL(get)得到的json响应示例 下面是我试图在shell脚本中编写的逻辑。我对shell脚本是完全陌生的,并且发现很难为我的需求编写脚本。 我该怎么开始呢?如果你们中的任何人有一个文档链接也会很有帮助吗Bash 用于从curl读取响应并在JSON响应的特定值上循环的Shell脚本,bash,shell,Bash,Shell,我正在创建一个shell脚本(.sh),并尝试从REST调用的JSON响应中读取特定值。下面是我通过调用RESTURL(get)得到的json响应示例 下面是我试图在shell脚本中编写的逻辑。我对shell脚本是完全陌生的,并且发现很难为我的需求编写脚本。 我该怎么开始呢?如果你们中的任何人有一个文档链接也会很有帮助吗 response = curl 'http://test-url/checkTestEnable' for(till response.isTestRunning is tru
response = curl 'http://test-url/checkTestEnable'
for(till response.isTestRunning is true)
{
response = curl 'http://test-url/checkTestEnable'
if(response.isTestRunning is false){
//curl 'another url'
//break the loop.
}
}
我同意jq
类似于JSON数据的sed
while[“$(curl-sS-H'Accept:application/json”http://test-url/checkTestEnable' |
jq'.isTestRunning')”=“true”];做
睡眠10
完成
卷曲“另一个URL”
如果jq
不可用,您可以使用以下有点难看的正则表达式来代替sed
while[“$(curl-sS-H'Accept:application/json”http://test-url/checkTestEnable' |
sed-re's/*”:(假|真),“*/\1/”=“真”];做
睡眠10
完成
卷曲“另一个URL”
顺便说一句:如果你能创建shell脚本,那么你就可以安装jq
,它只是一个二进制文件。我同意jq
类似于JSON数据的sed
while[“$(curl-sS-H'Accept:application/json”http://test-url/checkTestEnable' |
jq'.isTestRunning')”=“true”];做
睡眠10
完成
卷曲“另一个URL”
如果jq
不可用,您可以使用以下有点难看的正则表达式来代替sed
while[“$(curl-sS-H'Accept:application/json”http://test-url/checkTestEnable' |
sed-re's/*”:(假|真),“*/\1/”=“真”];做
睡眠10
完成
卷曲“另一个URL”
顺便说一句:如果你可以创建shell脚本,那么你就可以安装
jq
,它只是一个二进制文件。很遗憾你不能安装jq
,因为它确实是处理shell中JSON的最好方法@只要isterunning
是curl
返回的对象中唯一的布尔值,JGK的sed
解决方案就可以工作;如果这种情况发生变化,您可以稍微复杂化sed
表达式,以确保得到正确的表达式,但使用正则表达式解析JSON很快就会变得难以控制
根据系统上安装的内容,可能还有其他选项。Python通常附带JSON模块,例如:
isTestRunning() {
curl -sS -H 'Accept: application/json' 'http://test-url/checkTestEnable' |
python -c 'import json,sys;print(json.load(sys.stdin)["isTestRunning"])' |
grep -q True
}
while isTestRunning; do
sleep 10
done
很遗憾您不能安装
jq
,因为它确实是从shell处理JSON的最佳方式@只要isterunning
是curl
返回的对象中唯一的布尔值,JGK的sed
解决方案就可以工作;如果这种情况发生变化,您可以稍微复杂化sed
表达式,以确保得到正确的表达式,但使用正则表达式解析JSON很快就会变得难以控制
根据系统上安装的内容,可能还有其他选项。Python通常附带JSON模块,例如:
isTestRunning() {
curl -sS -H 'Accept: application/json' 'http://test-url/checkTestEnable' |
python -c 'import json,sys;print(json.load(sys.stdin)["isTestRunning"])' |
grep -q True
}
while isTestRunning; do
sleep 10
done
正如@JGK所建议的,下面的一个对我来说就像一个魔术。非常感谢@JGK
while [ "$(curl -sS -H 'Accept: application/json' 'http://test-url/checkTestEnable' |
sed -re 's/.*":(false|true),".*/\1/')" = "true" ]; do
sleep 10
done
curl 'ANOTHER_URL'
正如@JGK所建议的,下面的一个对我来说就像一个魔术。非常感谢@JGK
while [ "$(curl -sS -H 'Accept: application/json' 'http://test-url/checkTestEnable' |
sed -re 's/.*":(false|true),".*/\1/')" = "true" ]; do
sleep 10
done
curl 'ANOTHER_URL'
感谢@JGK的及时回复!我们没有安装jq的特权。在shell脚本或curl命令本身中还有其他解析json的方法吗?在不使用
jq
的情况下增强了答案,感谢@JGK的快速响应!我们没有安装jq的特权。在shell脚本或curl命令本身中还有其他解析json的方法吗?不使用jq