Bashスクリプト配列の概念

Bashスクリプト配列の概念

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配列

関連情報