[英]shell script to accept multiple sets of arrays in for loop
嗨,有人可以在shell腳本上幫我嗎?
我有2台主機和4台服務器,我想通過使用for循環
host1 --> host1_server1 host1_server2
host2 --> host2_server1 host2_server2
我想使用for
循環打印兩個集合,輸出兩個集合:
設置1個輸出
hostname : host1 servers: host1_server1
hostname : host1 servers: host1_server2
設置2輸出
hostname : host2 servers: host2_server1
hostname : host2 servers: host2_server2
如何使用Bash Shell腳本實現此目標?
一種Bash解決方案是使用Bash數組, 間接引用和printf
。
#!/bin/bash
declare -a hosts=(host1 host2) # array of variable names; quoting not needed
declare -a host1=("host1_server1" "host1_server2")
declare -a host2=("as-host2_server1" "as-host2_server2")
for Host in "${hosts[@]}"; do
Indirect="$Host[@]"
printf "hostname : $Host servers: %s\n" "${!Indirect}"
done
上面產生了以下輸出:
hostname : host1 servers: host1_server1
hostname : host1 servers: host1_server2
hostname : host2 servers: as-host2_server1
hostname : host2 servers: as-host2_server2
此解決方案還利用了printf
命令的行為來重用格式以使用所有參數。 在man bash
,請參見printf
部分:
該格式可根據需要重新使用以消耗所有參數
有趣的是,請注意Bash習慣用法"${Variable[@]}"
保留數組元素內的所有空格。 同樣,如果數組中沒有元素,則該慣用法擴展為空。 這在許多情況下非常有用。
這些方法結合在一起,可以實現一個for循環來完成您所要求的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.