Unix shell bash script - Itération d'une matrice en un "pour" boucle
J'ai le script de test suivant:
#!/bin/sh
testArray=(A,B,C,D,E)
currentValue=''
tempValue=x
for i in "${testArray[@]}"
do
currentValue=$i
echo "Processing " ${currentValue}
if [ ${currentValue}==A ]
then
tempValue="$i 123"
else
tempValue=$i
fi
echo "Current loop " ${tempValue}
echo `date`
done
Quand je l'ai tester, le résultat que j'obtiens est
Processing A,B,C,D,E
Current loop A,B,C,D,E 123
Mon Dec 2 20:33:26 GMT 2013
Il ressemble à la "pour" boucle en Bash fonctionne en quelque sorte différemment de ce que je suis habitué à ce que j'attendais la sortie suivante (c'est à dire ce qui est dans le "pour" de la boucle pour être répétée pour chacun des éléments du tableau)
Processing A
Current loop A 123
Mon Dec 2 20:29:44 GMT 2013
Processing B
Current loop B
Mon Dec 2 20:29:45 GMT 2013
Processing C
Current loop C
Mon Dec 2 20:29:46 GMT 2013
Processing D
Current loop D
Mon Dec 2 20:29:47 GMT 2013
Processing E
Current loop E
Mon Dec 2 20:29:48 GMT 2013
- Pourquoi le 123 à la fin?
- Pourquoi la date de la commande exécutée qu'une seule fois et non pas pour chaque itération
- Que dois-je faire pour rendre chaque itération travail correctement.
Fondamentalement, ce que je suis en train de réaliser est d'écrire un script qui parcourt une liste de tableau et d'exécuter la même commande en fonction de différents paramètres dépend de la valeur de l'élément courant du tableau. J'ai écrit le script ci-dessus pour essayer de comprendre comment la boucle fonctionne, mais je ne reçois pas la sortie, je m'attendais.
Vous devez vous connecter pour publier un commentaire.
Cette ligne
crée un tableau à un seul élément, à savoir la chaîne "A,B,C,D,E'. Les éléments du tableau sont séparés par des espaces, pas de virgules. Utilisation
Vous aurez également besoin d'ajouter de l'espace à votre
if
déclaration (et techniquement, vous devez utiliser=
à l'intérieur de[...]
, pas==
, ainsi que de citer le paramètre d'extension):test
expression.bash
vous permet d'utiliser==
comme un synonyme pour l'égalité=
, mais il ne fait pas partie de la spécification POSIX.D'une façon de plus
Changer votre boucle:
Comme Suggéré par chepner Changement instruction conditionnelle à: