Para script bash de sintaxe de loop

3

Existe alguma maneira de implementar algo como isso no script 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

Obrigado.

    
por Uvais Ibrahim 25.10.2014 / 09:02

2 respostas

5

Se você deseja aninhar para que cada servidor seja executado em cada IP (ou seja, executar 9 vezes), você pode:

for ip in $pureips; do
    for server in $pureservers; do
        echo "$server | $ip "
    done
done

Se você quiser apenas rastrear cada item (por exemplo, executar 3 vezes, executar o primeiro ip com o primeiro servidor, o segundo com o segundo, etc), você pode usar um iterador e chamar o índice do array manualmente. Mas isso significa que também precisamos converter as strings em arrays primeiro:

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
    
por Oli 25.10.2014 / 09:27
0

Para usar a sintaxe (bem, quase) que você estava tentando, você teria que converter suas strings em matrizes:

$ 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 
    
por terdon 25.10.2014 / 13:54

Tags