请有人能通过一个例子来建议如何实现下面用 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