次のコマンドで使用するコマンド出力の解析

次のコマンドで使用するコマンド出力の解析

ある gcloud 命令の各出力行を別の gcloud 命令に使用したいと思います。

gcloud container clusters list |grep jesse(エイリアスgccl)出力:

jesse-gke1                us-eastx-x
jesse-gke2                us-eastx-x

次のコマンドには、これら2つの変数(名前と地域)が必要です。

ただし、awkを使用して次のコマンドに必要な変数を取得しようとすると、2つの結果が2行の1つの変数に結合されます。

cluster=$(gccl 2>/dev/null|grep jesse|awk '{print $1}') ; echo $cluster

出力:

jesse-gke1
jesse-gke2

次のコマンドで2つの出力項目を取得するにはどうすればよいですか?

gcloud someaction jesse-gke1 zone=us-eastx-x

結果を繰り返しますか?

ありがとうございます!

ベストアンサー1

#!/bin/sh

gcloud container clusters list \
    --filter=name:jesse --format="csv[no-heading](name,location)" |
while IFS=, read -r name location; do
    printf 'Resizing NAME: %s, LOCATION: %s\n' "$name" "$location"
    gcloud container clusters resize \
        --zone "$location" "$name" --num-nodes=0 --quiet
done >gccl-script.log

これは書き換えです。独自のコード、ループのwhile代わりにループを使用してくださいforwhileループは、ループ内の未決定数の行を読み取る必要があるときはいつでも使用され、ループはfor静的リストを繰り返すために使用されます。

read複数のフィールドを複数の変数として読み取るのに非常に満足しているので、配列も必要ありません。

可変データを印刷するprintf代わりに使用します。echo結果は、echoシェルの現在の状態とデータ出力によって異なります。

ループ出力のリダイレクトをafterに移動できますdone

分割とファイル名のグロービングを防ぐには、すべての拡張子を正しく引用する必要があります。

私は小文字の変数名を使用します。

その他の関連質問:

おすすめ記事