如何从 for 循环索引的标准输出获取用户输入

如何从 for 循环索引的标准输出获取用户输入

这是我要执行的 shell 脚本。例如,我有 100 个 kubernetes pod 和 100 辆不同的车辆。

我想要生成一个汽车列表,并从列表中选择 10 辆特定汽车。

我的目标是将新图像部署到所选汽车的 Pod 中。

我可以通过数组和 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

如何实现通过名称选车或者只选车号选车?

请建议是否有其他方法可以做到这一点。或者建议 shell 脚本的更好做法。

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

相关内容