![다음 명령에 사용할 명령 출력 구문 분석](https://linux55.com/image/202368/%EB%8B%A4%EC%9D%8C%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EB%AA%85%EB%A0%B9%20%EC%B6%9C%EB%A0%A5%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D.png)
한 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
.
분할 및 파일 이름 글로빙을 방지하려면 모든 확장자를 올바르게 인용해야 합니다.
저는 소문자 변수 이름을 사용합니다.
기타 관련 질문: