Bash 尝试验证jq命令输出相等字符串或字符串有多个引用(AWS ELB实例状态查询)
我正在检查连接到AWS ELB的所有实例是否处于运行状态, 为此,我创建了一个AWS CLI命令来检查实例的状态。 问题是JSON输出返回两个实例的状态。 因此,按照我的意愿检查输出并不是那么简单 当我运行命令时:Bash 尝试验证jq命令输出相等字符串或字符串有多个引用(AWS ELB实例状态查询),bash,grep,jq,Bash,Grep,Jq,我正在检查连接到AWS ELB的所有实例是否处于运行状态, 为此,我创建了一个AWS CLI命令来检查实例的状态。 问题是JSON输出返回两个实例的状态。 因此,按照我的意愿检查输出并不是那么简单 当我运行命令时: aws elb describe-instance-health --load-balancer-name ELB-NAME | jq -r '.[] | .[] | .State' 输出为: InService InService 完整的JSON是: { "I
aws elb describe-instance-health --load-balancer-name ELB-NAME | jq -r '.[] | .[] | .State'
输出为:
InService
InService
完整的JSON是:
{
"InstanceStates": [
{
"InstanceId": "i-0cc1e6d50ccbXXXXX",
"State": "InService",
"ReasonCode": "N/A",
"Description": "N/A"
},
{
"InstanceId": "i-0fc21ddf457eXXXXX",
"State": "InService",
"ReasonCode": "N/A",
"Description": "N/A"
}
]
}
到目前为止,我所做的是创建一个线性shell命令:
export STR=$'InService\nInService'
if aws elb describe-instance-health --load-balancer-name ELB-NAME | jq -r '.[] | .[] | .State' | grep -q "$STR"; then echo 'yes'; fi
但只要在第一个命令输出时有InService,我就会得到yes
有没有一种方法,只有当我得到两次服务输出时,我才能得到真/是?
或者以任何其他方式来确定这确实是我得到的回报?没有看到JSON的信息示例,不清楚最好的解决方案是什么,但以下内容符合我理解的功能要求,无需任何进一步的后处理:
jq -r '
def count(stream): reduce stream as $s (0; .+1);
if count(.[][] | select(.State == "InService")) > 1 then "yes" else empty end
'
抱歉,我忘记附加完整的json输出