3 votes

Syntaxe de boucle for script bash

Y a-t-il un moyen de mettre en œuvre quelque chose comme ça dans un 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

Merci.

5voto

Mufaka Points 54

Si vous voulez que cela soit imbriqué de sorte que chaque serveur fonctionne contre chaque adresse IP (c'est-à-dire, exécuter 9 fois), vous pouvez :

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

Si vous voulez seulement suivre chaque élément (par exemple, exécuter 3 fois, en exécutant le premier IP avec le premier serveur, le deuxième avec le deuxième, etc.), vous pouvez utiliser un itérateur et appeler manuellement l'index du tableau. Mais cela signifie que nous devrons également convertir les chaînes en tableaux d'abord :

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

0voto

Stewart Points 1385

Pour utiliser la syntaxe (enfin presque) que vous essayiez, vous devriez convertir vos chaines en tableaux :

$ 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X