
Bash 스크립트에서 이와 같은 것을 구현할 수 있는 방법이 있습니까?
pureips="10.3.1.111 10.3.1.112 10.3.1.114";
pureservers="a b c";
for ip,server in $pureips,$pureservers; do
echo "$server | $ip ";
done
감사해요.
답변1
각 서버가 각 IP에 대해 실행되도록(예: 9번 실행) 이를 중첩하려면 다음을 수행할 수 있습니다.
for ip in $pureips; do
for server in $pureservers; do
echo "$server | $ip "
done
done
각 항목만 추적하려는 경우(예: 3번 실행, 첫 번째 서버에서 첫 번째 IP 실행, 두 번째 서버에서 두 번째 IP 실행 등) 반복자를 사용하고 배열의 인덱스를 수동으로 호출할 수 있습니다. 하지만 이는 먼저 문자열을 배열로 변환해야 함을 의미합니다.
read -a pureips <<< "10.3.1.111 10.3.1.112 10.3.1.114"
read -a pureservers <<< "a b c"
for ((i=0; i<=${#pureips[@]}; i++)); do
echo "${pureservers[i]} | ${pureips[i]}"
done
답변2
시도했던 구문(음, 거의)을 사용하려면 문자열을 배열로 변환해야 합니다.
$ pureips=(10.3.1.111 10.3.1.112 10.3.1.114)
$ pureservers=(a b c)
$ for server in ${pureservers[@]}; do
for ip in ${pureips[@]}; do
echo "$server | $ip ";
done
done
a | 10.3.1.111
a | 10.3.1.112
a | 10.3.1.114
b | 10.3.1.111
b | 10.3.1.112
b | 10.3.1.114
c | 10.3.1.111
c | 10.3.1.112
c | 10.3.1.114