Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 ?

buntu35 a écrit :

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 wink


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