首页 > 解决方案 > 二维数组的特定输出

问题描述

我正在运行 API 调用以获取集群中的节点状态。输出格式如下。我正在编写一个 shell 脚本来发布每个处于未就绪状态的节点的状态。但是我无法为此设计逻辑。

node1 ready
node2 disconnected
node3 ready

下面是我的脚本。请就更改提出建议。

#!/bin/bash

auth_token=$(curl -sk -d '{"username":"","password":""}' https://url/auth/login | jq -r .auth_token)

echo $auth_token

status=$(curl -X GET "https://<url>/nodes" -H "accept: application/json" -H "Authorization: Bearer $auth_token" | jq -r '.[] | .Description.Hostname + " " +  .Status.State')

STATUS=($status)
alenght=${#STATUS[@]}
for (( i=0; i<${alenght}; i++));
do
#       echo ${org[i]}
    if [ ${org[i]} != "ready" ]
    then
        $dd_status = 3
        $hostname = <hostname with status not ready>
        curl -X POST https://api.datadoghq.com/api/v1/check_run?api_key=${DD_CLIENT_API_KEY} \
        -H "Content-Type: application/json" \
        -d @- << EOF
        {
          "check": "check_name",
          "host_name": "$host_name",
          "status": "$dd_status",
          "tags": [
            "environment:test"
          ]
        }
        EOF
        
    else
        $dd_status = 0
        $hostname = <hostname with status ready >
        curl -X POST https://api.datadoghq.com/api/v1/check_run?api_key=${DD_CLIENT_API_KEY} \
        -H "Content-Type: application/json" \
        -d @- << EOF
        {
          "check": "check_name",
          "host_name": "$host_name",
          "status": "$dd_status",
          "tags": [
            "environment:test"
          ]
        }
        EOF
    fi
done

标签: linuxbashshell

解决方案


试试这个逻辑

while read -r name status; do
    case $status in
        ready) good_code;;
            *) fail_code;;
    esac
done < <(code_to_generate_log)

推荐阅读