Bash 用于从curl读取响应并在JSON响应的特定值上循环的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

我正在创建一个shell脚本(.sh),并尝试从REST调用的JSON响应中读取特定值。下面是我通过调用RESTURL(get)得到的json响应示例

下面是我试图在shell脚本中编写的逻辑。我对shell脚本是完全陌生的,并且发现很难为我的需求编写脚本。 我该怎么开始呢?如果你们中的任何人有一个文档链接也会很有帮助吗

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