Bash 尝试验证jq命令输出相等字符串或字符串有多个引用(AWS ELB实例状态查询)

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的所有实例是否处于运行状态, 为此,我创建了一个AWS CLI命令来检查实例的状态。 问题是JSON输出返回两个实例的状态。 因此,按照我的意愿检查输出并不是那么简单

当我运行命令时:

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输出