簡體   English   中英

Shell腳本在for循環中接受多組數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM