Bash 스크립트 배열 개념

Bash 스크립트 배열 개념

두 개의 별도 목록이 있습니다. 하나는 1000개의 호스트 이름을 포함하고 다른 하나는 해당 호스트에 대한 1000개의 연결된 IP를 포함합니다. 모니터링 환경에 모든 호스트를 추가하려면 구성 항목을 생성하고 구성 파일에 푸시해야 합니다.

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

아래와 같은 루프에서 하나씩 어떻게 반복해야 합니까? 단일 배열에 대해 반복을 사용하는 방법을 알고 있지만 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

첫 번째 목록의 예(목록 1):

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

최대 1000개의 호스트

두 번째 목록의 예(목록 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 배열

관련 정보