ある 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
代わりにループを使用してくださいfor
。while
ループは、ループ内の未決定数の行を読み取る必要があるときはいつでも使用され、ループはfor
静的リストを繰り返すために使用されます。
read
複数のフィールドを複数の変数として読み取るのに非常に満足しているので、配列も必要ありません。
可変データを印刷するprintf
代わりに使用します。echo
結果は、echo
シェルの現在の状態とデータ出力によって異なります。
ループ出力のリダイレクトをafterに移動できますdone
。
分割とファイル名のグロービングを防ぐには、すべての拡張子を正しく引用する必要があります。
私は小文字の変数名を使用します。
その他の関連質問: