for 루프 인덱스의 표준 출력에서 ​​사용자 입력을 얻는 방법

for 루프 인덱스의 표준 출력에서 ​​사용자 입력을 얻는 방법

이것이 내가 실행하려는 쉘 스크립트입니다. 예를 들어, 100개의 kubernetes 포드와 100개의 다양한 차량이 있습니다.

자동차 목록을 생성하고 목록에서 특정 자동차 10대를 선택하고 싶습니다.

내 목표는 선택한 자동차의 포드에 새 이미지를 배포하는 것입니다.

배열과 grep을 통해 자동차 목록을 생성할 수 있습니다.

#!/bin/bash     
array=$(kubectl get pods -n ns -o=name | grep "cars" )
declare array
INDEX=1
for i in ${array[@]}; do
    echo ${INDEX} $i
    INDEX=$(expr $INDEX + 1)  ## this will make a numbered list.
done

샘플 출력

1 cars-bmw
2 cars-audi
3 cars-volkswagen
4 cars-jaguar
5 cars-ferrari
6 cars-toyota
7 cars-honda

이름으로 또는 차량 번호로만 자동차를 선택하는 방법은 무엇입니까?

이 외에 다른 방법이 있는지 제안 부탁드립니다. 또는 쉘 스크립팅에 대한 더 나은 방법을 제안하십시오.

while [[ read  -p {array[@]} ]]; do
    echo "choosing car " {array[@]}
    kubectl edit pod -n ns $podname -o yaml
done
exit 1

답변1

당신이 사용할 수있는 select:

select car in "${array[@]}" exit; do
    case $car in
        exit) break;;
        *)
            printf 'Choosing car: %s\n' "$car"
            kubectl edit pod -n ns "$car" -o yaml
        ;;
    esac
done

물론 이는 먼저 array=()다음 구문을 사용하여 배열을 올바르게 설정했는지에 따라 달라집니다.

array=($(kubectl get pods -n ns -o=name | grep "cars" ))

답변2

아마도 다음과 같은 것이 목록을 생성하는 데 도움이 될 수 있습니다.

for (( i=1; i<=${#array[@]}; i++ ))
do
  echo $i ${array[$i]}
done

관련 정보