다음 명령에 사용할 명령 출력 구문 분석

다음 명령에 사용할 명령 출력 구문 분석

한 gcloud 명령어의 각 출력 줄을 다른 gcloud 명령어에 사용하고 싶습니다.

gcloud container clusters list |grep jesse(별칭 gccl) 출력:

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

다음 명령에는 이 두 변수(이름 및 지역)가 필요합니다.

그러나 awk를 사용하여 다음 명령에 필요한 변수를 얻으려고 하면 두 결과가 두 줄이 포함된 하나의 변수로 결합됩니다.

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

산출:

jesse-gke1
jesse-gke2

다음과 같은 명령으로 두 개의 출력 항목을 얻으려면 어떻게 해야 합니까?

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.

분할 및 파일 이름 글로빙을 방지하려면 모든 확장자를 올바르게 인용해야 합니다.

저는 소문자 변수 이름을 사용합니다.

기타 관련 질문:

관련 정보