2つの別々のリストがあります。 1つは1000個のホスト名を含み、もう1つはそのホストの1000個の接続IPを含みます。監視環境にすべてのホストを追加するには、構成エントリを作成して構成ファイルにプッシュする必要があります。
#!/bin/bash
Enter the hostnames
readarray hosts
Enter the IP's
readarray IP
以下のループで1つずつどのように繰り返すべきですか?単一の配列に対して反復を使用する方法を知っていますが、for i in "${hosts[@]}"
2つの別々のリストがある場合、反復をどのように実装しますか?
echo -e "\nObject host \""$hosts"\"{"
import = \""generic-service"\"
address = \""$IP"\"
group = \""Mom1-Ping"\"
"\n}" >> /etc/icinga2/zones.d/mom2/AP.conf
最初のリストの例(リスト1):
sjc02-mfg-api01.example.com
sjc02-mfg-api02.example.com
sjc02-mfg-api03.example.com
最大1000のホスト
2番目のリストの例(リスト2):
10.20.2.22
10.20.2.23
10.20.2.24
最大1000個のIP
予想出力:
Object host "sjc02-mfg-api01.example.com" {
import = "generic-service"
address = "10.20.2.22"
group = "Mom01-Ping"
}
Object host "sjc02-mfg-api02.example.com" {
import = "generic-service"
address = "10.20.2.23"
group = "Mom01-Ping"
}
Object host "sjc02-mfg-api03.example.com" {
import = "generic-service"
address = "10.20.2.24"
group = "Mom01-Ping"
}
..........like this I need to generate to all 1000 hosts.............
答え1
両方のリストを一緒にマージするために使用しますpaste
。次のようにできます。
#!/bin/bash
paste list1 list2 | while IFS=$'\t' read -r L1 L2
do
echo "
Object host ${L1} {
import = "generic-service"
address = ${L2}
group = "Mom01-Ping"
}"
done
出力:
Object host sjc02-mfg-api01.example.com {
import = generic-service
address = 10.20.2.22
group = Mom01-Ping
}
Object host sjc02-mfg-api02.example.com {
import = generic-service
address = 10.20.2.23
group = Mom01-Ping
}
Object host sjc02-mfg-api03.example.com {
import = generic-service
address = 10.20.2.24
group = Mom01-Ping
}
答え2
繰り返すことができます索引アレイペア:
a1=(foo bar baz)
a2=(one two three)
for ((i=0; i < "${#a1[@]}"; i++)); do
echo "${a1[i]} => ${a2[i]}"
done
${#a1[@]}
どこにサイズa1配列