Comment faire changer une variable en fonction de for
Résolu
lsda26
Messages postés
70
Statut
Membre
-
zipe31 Messages postés 38797 Statut Contributeur -
zipe31 Messages postés 38797 Statut Contributeur -
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"
A voir également:
- Comment faire changer une variable en fonction de for
- Changer dns - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Fonction si et - Guide
- Changer clavier qwerty en azerty - Guide
- Changer de carte graphique - Guide
3 réponses
hello
il manque un eval
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é ;-(
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
Et en bash, on peut utiliser un tableau associatif.
enfin, n'importe quoi plutôt que de préconiser eval.
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
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)