Команда ADS2 CLS Создание
создает следующий вывод:
cluster established ...
nodes {
node {
name = "fdt-c-agx-0002";
address = "http://172.16.11.89:9011/";
state = "3";
}
node {
name = "FDT-C-VM-0094";
address = "http://172.16.11.49:9011/";
state = "3";
}
}
Что я пытаюсь, это найти имя
каждого узла и его статуса, назначайте каждому переменной и распечатайте их, чтобы выводиться как:
Node-1 имя
имеет состояние состояние
# это соответствует К первому узлу
NODE-2 имя
имеет состояние состояние
# это соответствует второму узлу
, поэтому я начал с Greep, как Status-Nod1 = «$ (ADS2 CLS Создать | GREP State | Cut -D '' '-F 2)"
& name-nod1 = "$ (ads2 cls class create | grep name | cut --d' '' -ff 2) "
.
Это работает, однако, находит все совпадения с состоянием
и« имя »и, таким образом, возвращает
3
3
fdt-c-agx-0002
FDT-C-VM-0094
так, как я могу вывести матч в порядке записи, чтобы каждый узел Соответствует своему штату
Это не самый эффективный код, но он справится с задачей.
#! /bin/bash
mapfile -t name < <(ads2 cls create | grep -Po "name = \"\K.*(?=\")")
mapfile -t state < <(ads2 cls create | grep -Po "state = \"\K.*(?=\")")
a=0
while [[ $a -gt -1 ]]
do
echo "NODE-$(echo $a+1 | bc) ${name[$a]} has the state ${state[$a]}"
a=$(echo "$a+1" | bc)
if [[ -z ${name[$a]} ]]
then
a=-2
fi
done
Вставьте его в файл .sh
(например, node_status.sh
), сделайте его исполняемым (sudo chmod a+x node_status. sh
), а затем запустите его (путь/к/скрипту/node_status.sh
или ./node_status.sh
, если вы находитесь в каталоге, в котором расположен скрипт). Хорошо то, что когда вы добавляете узел(ы) (NODE-3 NODE-4 и т.д.), скрипт может справиться с этим и даст вам имя и статус каждого узла (а не только первых двух). Вы можете иметь 100 узлов, и он выдаст имя и статус всех 100 узлов.