使用 bash 脚本遍历关系数组

使用 bash 脚本遍历关系数组

请有人能通过一个例子来建议如何实现下面用 bash 编写的内容。

对于每个数据中心,我希望在该数据中心的每个虚拟机上运行一个功能。

直流=(AWS,天蓝色)

aws =(“aws-vm1”,“aws-vm2”,“aws-vm3”...“aws-vm10”)

azure=("azure-vm1" "azure-vm2" "azure-vm3" . . . "azure-vm10")

随着 DC 和 VM 的增长,这应该是可扩展的。

使用 switch 语句是否最好

谢谢

答案1

bash 代码将是

dc=(aws azure)    # no commas for array initialization
aws=(             # can use newlines for readability
    aws-vm1 
    aws-vm2 
    aws-vm3 
    ... 
    aws-vm10
)
azure=(azure-vm1 azure-vm2 azure-vm3 ... azure-vm10)

for provider in "${dc[@]}"; do
    declare -n p=$provider           # set a "nameref" for ease of use
    for vm in "${p[@]}"; do
        echo do something with $provider vm $vm
    done
done

这输出

do something with aws vm aws-vm1
do something with aws vm aws-vm2
do something with aws vm aws-vm3
do something with aws vm ...
do something with aws vm aws-vm10
do something with azure vm azure-vm1
do something with azure vm azure-vm2
do something with azure vm azure-vm3
do something with azure vm ...
do something with azure vm azure-vm10

答案2

听起来你正在寻求有关如何进行基本编程的建议,无论这是否是 bash。如果我理解你的问题,你想知道如何迭代多个列表。

用一个for环形。

for a in dc; do
  for b in aws; do
     # does work for all AWS instances in the array
  done

  for c in azure; do
     # does work for all instances in the azure array
  done
done

相关内容