Bash scripting Conceitos da matriz

3

Eu tenho duas listas separadas. Um contém 1000 nomes de host e outro contém 1000 IPs associados para esses hosts. Eu preciso gerar entradas de configuração e empurrar para o meu arquivo de configuração para adicionar todos os hosts em nosso ambiente de monitoramento.

    #!/bin/bash
    Enter the hostnames
    readarray hosts
    Enter the IP's
    readarray IP

Como devo iterar um por um em um loop como abaixo? Eu sei como iterar matriz única usando for i in "${hosts[@]}" , mas no caso de duas listas separadas, como obter iteração?

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

Exemplo da primeira lista (lista 1):

sjc02-mfg-api01.example.com 
sjc02-mfg-api02.example.com
sjc02-mfg-api03.example.com

até 1000 hosts

Exemplo da segunda lista (Lista 2):

10.20.2.22 
10.20.2.23 
10.20.2.24

até 1000 IP's

Resultado esperado:

     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.............
    
por naren viru 27.09.2018 / 13:24

2 respostas

5

Combine suas duas listas juntas usando paste . Você pode fazer da seguinte maneira:

#!/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 

saída:

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
     }
    
por 27.09.2018 / 13:58
2

Você pode iterar pelos índices do par de matrizes:

a1=(foo bar baz)
a2=(one two three)

for ((i=0; i < "${#a1[@]}"; i++)); do 
    echo "${a1[i]} => ${a2[i]}"
done

onde ${#a1[@]} é o tamanho da matriz a1

    
por 27.09.2018 / 16:41