For 루프 구문 bash 스크립트

For 루프 구문 bash 스크립트

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 

관련 정보