Shell-Script
解析命令輸出以用於下一個命令
我想將一個 gcloud 命令的每一行輸出用於另一個 gcloud 命令。
gcloud container clusters list |grep jesse
(別名 gccl)輸出:jesse-gke1 us-eastx-x jesse-gke2 us-eastx-x
我在下一個命令中需要這兩個變數(名稱和區域)。
但是當我嘗試使用 awk 來獲取下一個命令所需的變數時,它將兩個結果組合成一個包含 2 行的變數。
cluster=$(gccl 2>/dev/null|grep jesse|awk '{print $1}') ; echo $cluster
輸出:
jesse-gke1 jesse-gke2
如何在如下所示的命令中獲取兩個輸出項:
gcloud someaction jesse-gke1 zone=us-eastx-x
並遍歷結果?
謝謝!
#!/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
取決於 shell 的目前狀態和輸出的數據。我們可以將循環輸出的重定向移動到 after
done
。我們需要正確引用所有副檔名以避免發生拆分和文件名通配。
我正在使用小寫的變數名。
其他相關問題: