Para script bash de sintaxis de bucle

Para script bash de sintaxis de bucle

¿Hay alguna manera de que podamos implementar algo como esto en el 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

Gracias.

Respuesta1

Si desea que esto se anide para que cada servidor se ejecute en cada IP (es decir, se ejecute 9 veces), puede:

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

Si desea simplemente realizar un seguimiento de cada elemento (por ejemplo, ejecutar 3 veces, ejecutar la primera IP con el primer servidor, la segunda con el segundo, etc.), puede usar un iterador y llamar al índice de la matriz manualmente. Pero eso significa que primero también necesitaremos convertir las cadenas en matrices:

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

Respuesta2

Para usar la sintaxis (bueno, casi) que estaba intentando, tendría que convertir sus cadenas en matrices:

$ 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 

información relacionada