#1 Le 22/09/2010, à 20:27
- MezzoForte
[résolu] Appel de variable en bash $1 $2 $3 ... $i ?
Bonjour à tous,
Je sais au départ que j'ai n variables :
$1 $2 $3 ... $n
Comment faire pour les appeler successivement de la 1ère à la dernière dans ce script :
for i in `seq 1 $n`;
do
echo ${$i}
done
Ce script ne fonctionne pas.
Dernière modification par MezzoForte (Le 22/09/2010, à 20:43)
L'âme rien ne l'afflige, quand elle y pense.
Hors ligne
#2 Le 22/09/2010, à 20:37
- Totor
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
bonsoir,
tout simplement comme ceci
for i
do
echo $i
done
# ou si tu tiens absolument à travailler avec des indices
for((x=1;x<=$#;x++))
do
echo "param $x = ${!x}"
done
Dernière modification par Totor (Le 22/09/2010, à 20:41)
-- Lucid Lynx --
Hors ligne
#3 Le 22/09/2010, à 20:38
- buntu35
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
Salut MezzoForte
regardes par là : http://forum.ubuntu-fr.org/viewtopic.php?id=238919
Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné.
La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner.
Hors ligne
#4 Le 22/09/2010, à 20:42
- MezzoForte
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
Merci pour votre rapidité !
C'est bien ça et je suis débloqué !
L'âme rien ne l'afflige, quand elle y pense.
Hors ligne
#5 Le 22/09/2010, à 20:43
- Totor
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
Salut MezzoForte
regardes par là : http://forum.ubuntu-fr.org/viewtopic.php?id=238919
--> c'est justement le genre de chose à ne pas faire
-- Lucid Lynx --
Hors ligne
#6 Le 22/09/2010, à 20:47
- MezzoForte
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
J'ai utilisé
for i
do
echo $i
done
Voilà qui me permet de faire une action nautilus pour plusieurs fichiers
L'âme rien ne l'afflige, quand elle y pense.
Hors ligne
#7 Le 22/09/2010, à 22:42
- buntu35
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
@totor :
La réference au post http://forum.ubuntu-fr.org/viewtopic.php?id=238919 n'est là que pour montrer que le problème de MezzoForte avait déjà été soumis sur le forum.
D'ailleurs, le post #6 du fil donne la même réponse que toi :
#!/bin/bash
for i in $* # $* representent le liste de tout les arguments passe
do
echo $i
done
Cordialement.
Buntu35
Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné.
La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner.
Hors ligne
#8 Le 23/09/2010, à 08:30
- Totor
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
Bonjour,
@buntu35 :
La solution que je propose diffère du post #6. En effet, il y a une réserve à apporter à $*.
Certe cela référence les paramétres positionnels mais de façon erroné dans certains cas car cette méthode ne protège pas les espaces. Pour être plus précis : si un paramétre contient un espace, l'utilisation de $* le décomposera et retournera tous les mots de ce paramétre en tant que paramétre indépendant.
Les fichiers pouvant avoir des espaces dans leur nom, il est donc important de ne pas utiliser ta méthode.
Alors que ma solution équivaut à ceci :
for i in "$@"
do
echo "$i"
done
Bon à savoir :
$*=$@ mais "$*" <> "$@"
car $*="$1 $2 $3 ... $n" alors que "$@"="$1" "$2" "$3" ... "$n"
et "$*" retourne 1 paramétre vide si il n'y a aucun paramétre alors que "$@" ne retourne aucun paramétre.
Pour t'en convaincre, je te propose ce petit script (testparam.sh) :
#!/bin/bash
printf "methode 1\n"
for x
do
echo "- ${x}"
done
printf "methode \$*\n"
for x in $*
do
echo "- ${x}"
done
printf "methode \$@\n"
for x in $@
do
echo "- ${x}"
done
printf 'methode "$*"\n'
for x in "$*"
do
echo "- ${x}"
done
printf 'methode "$@"\n'
for x in "$@"
do
echo "- ${x}"
done
et pour le tester :
1er appel : ./testparam.sh
2nd appel : ./testparam.sh parametre1 "parametre #2"
Dernière modification par Totor (Le 23/09/2010, à 09:29)
-- Lucid Lynx --
Hors ligne
#9 Le 23/09/2010, à 09:24
- buntu35
Re : [résolu] Appel de variable en bash $1 $2 $3 ... $i ?
@totor :
effectivement, il y a toujours les arguments contenant des espaces, et qui prennent souvent la tête, et manière général sur les scripts unix (noms de fichiers par exemple). D'ailleurs, souvent dans les tests de scripts, on oublie souvent ces arguments "space".
Par nos posts précédents, la nuance, non négligeable, entre $* et $@ a été exposée. Au moins, çà fait avancer les choses...
Bonne journée.
Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné.
La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner.
Hors ligne