Comment faire changer une variable en fonction de for
Résolu
lsda26
Messages postés
70
Statut
Membre
-
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voilà mon script de test:
#!/bin/bash
MAC='a4:ba:db:01:01:01'
MACWIFI='1c:af:f7:02:02:02'
for j in MAC MACWIFI
do
MACTest=$(echo "\$$j")
echo $MACTest
done;
j'essai de faire apparaître l'adresse MAC correspondant au cycle de la boucle for:
quand $j = MAC alors MACTest doit être égale à "a4:ba:db:01:01:01"
et quand $j = MACWIFI alors MACTest doit être égale à "1c:af:f7:02:02:02"
Je pense avoir un problème de syntaxe avec : MACTest=$(echo "\$$j")
Même avec MACTest="\$$(echo $j)" cela m'affiche toujours "$MAC" et "$MACWIFI"
Voilà mon script de test:
#!/bin/bash
MAC='a4:ba:db:01:01:01'
MACWIFI='1c:af:f7:02:02:02'
for j in MAC MACWIFI
do
MACTest=$(echo "\$$j")
echo $MACTest
done;
j'essai de faire apparaître l'adresse MAC correspondant au cycle de la boucle for:
quand $j = MAC alors MACTest doit être égale à "a4:ba:db:01:01:01"
et quand $j = MACWIFI alors MACTest doit être égale à "1c:af:f7:02:02:02"
Je pense avoir un problème de syntaxe avec : MACTest=$(echo "\$$j")
Même avec MACTest="\$$(echo $j)" cela m'affiche toujours "$MAC" et "$MACWIFI"
3 réponses
-
hello
il manque un eval$ cat f1 #!/bin/bash MAC='a4:ba:db:01:01:01' MACWIFI='1c:af:f7:02:02:02' for j in MAC MACWIFI do MACTest=$(eval echo \$$j) echo $MACTest done; $ ./f1 a4:ba:db:01:01:01 1c:af:f7:02:02:02 $
-
Salut,
Mieux vaut faire avec l'indirection des variables, "eval" étant assez mal considéré ;-(
$ cat foo.sh #!/bin/bash MAC='a4:ba:db:01:01:01' MACWIFI='1c:af:f7:02:02:02' for j in MAC MACWIFI do MACTest="$j" echo "${!MACTest}" done $ ./foo.sh a4:ba:db:01:01:01 1c:af:f7:02:02:02 $
-
salut,
lsda26 utilise bash, alors il est effectivement mal venu de lui recommander eval.
En sh, pour ne pas recourir à eval, on peut passer par un sous-shell#!/bin/sh MAC='a4:ba:db:01:01:01' MACWIFI='1c:af:f7:02:02:02' (set -- "$MAC" "$MACWIFI"; for i do echo "$i"; done)
Et en bash, on peut utiliser un tableau associatif.#!/bin/bash declare -A MACwi=( [re]='a4:ba:db:01:01:01' [fi]='1c:af:f7:02:02:02' ) for i in "${!MACwi[@]}"; do echo "$i = ${MACwi[$i]}"; done
enfin, n'importe quoi plutôt que de préconiser eval.-
Salut QQCQCPQ,
il est effectivement mal venu de lui recommander eval
Toi aussi t'as été frappé par les foudres de N_BaH ? ;-DD -
c'est qu'on a probablement eu le même degré de lecture du wiki de Greg Wooledge (page, qui, d'ailleurs, vient d'être mise à jour par Chris Johnson; dans mon souvenir elle était (la page ;)) plus stricte)
-
-