Bash 脚本数组概念

nar*_*iru 3 array shell-script icinga2

我有两个单独的列表。一个包含 1000 个主机名,另一个包含该主机的 1000 个关联 IP。我需要生成配置条目并推送到我的配置文件以添加我们监控环境下的所有主机。

    #!/bin/bash
    Enter the hostnames
    readarray hosts
    Enter the IP's
    readarray IP
Run Code Online (Sandbox Code Playgroud)

我应该如何在如下循环中一一迭代?我知道如何通过 using 迭代单个数组for i in "${hosts[@]}",但是在两个单独列表的情况下,如何实现迭代?

    echo -e "\nObject host \""$hosts"\"{"
    import = \""generic-service"\"
    address = \""$IP"\"
    group = \""Mom1-Ping"\" 
    "\n}" >> /etc/icinga2/zones.d/mom2/AP.conf
Run Code Online (Sandbox Code Playgroud)

第一个列表示例(列表 1):

sjc02-mfg-api01.example.com 
sjc02-mfg-api02.example.com
sjc02-mfg-api03.example.com
Run Code Online (Sandbox Code Playgroud)

多达 1000 台主机

第二个列表示例(列表 2):

10.20.2.22 
10.20.2.23 
10.20.2.24
Run Code Online (Sandbox Code Playgroud)

多达 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.............
Run Code Online (Sandbox Code Playgroud)

小智 5

使用 将您的两个列表组合在一起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 
Run Code Online (Sandbox Code Playgroud)

输出:

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
     }
Run Code Online (Sandbox Code Playgroud)