Shell-Script

解析命令輸出以用於下一個命令

  • February 24, 2022

我想將一個 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

我們需要正確引用所有副檔名以避免發生拆分和文件名通配。

我正在使用小寫的變數名。

其他相關問題:

引用自:https://unix.stackexchange.com/questions/690612