두 개의 별도 목록이 있습니다. 하나는 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 배열