Script Shell, utilisation de variables [Résolu/Fermé]

Signaler
-
 Ilaan -
Bonjour,

je m'essai actuellement a l'apprentissage du Script Shell, et j'aurai quelques difficultes et problemes sur lesquels je vous serai reconnaissant de m'aider.

Je suppose que c'est quelque chose de tout simple, mais je n'arrive pas a trouver la syntaxe adaptee.


J'aimerai afficher separement chaque argument passe en commande.
Je sais deja que $# me permet de lister le nombre d'arguments, que #@ donne tous les arguments, et que $n (n un entier superieur a 0) donne l'argument passe en commande situe en position n.

Cependant, moi ce que je voudrais, c'est pouvoir travailler sur chaque argument individuellement sans savoir a l'avance combien seront passes en commande.

Je pensais qu'un

a=1
while [ "$a" != "$#" ]

m'aiderait a recuperer chaque argument individuellement, mais la syntaxe me gene.
Je souhaite incrementer a jusqu'a la valeur de $#, et a chaque incrementation, donner l'argument.

Les variables $1, $2, $3 auraient pu m'aider, mais j'ignore combien d'arguments seront passes en commande, donc ils ne servent pas beaucoup...

Est-ce que vous sauriez comment afficher chaque argument a partir de la variable a qui s'incremente a chaque tour de boucle ?

3 réponses

Messages postés
125
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
21 mars 2010
18
Oui, j'y viens:

#!/bin/bash

echo "Total:$#"
a=0
while [ "$a" -lt "$#" ]
do
   a=$(($a + 1))
   eval echo "Argument n°$a: \$$a"
done


Voilà ;)
Syntaxe trouvée ici:
http://www.commentcamarche.net/forum/affich 9223857 script shell et parametre

Farwarx.
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Merci beaucoup Farwarx, c'est exactement ce que je cherchais a faire.
A la prochaine, peut-etre ^^'
Messages postés
125
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
21 mars 2010
18
Salut,
#!/bin/bash

echo "Total:$#"
a=0
while [ "$a" -lt "$#" ]
do
   a=$(($a + 1))
   echo "Argument n°$a: "
done


il manque comment afficher l'argument x.
Merci, mais je crois que je me suis mal exprime.

Le code que tu me proposes me permet d'incrementer la variable a (merci a toi^^"), cependant, moi je souhaiterai afficher a chaque tour de boucle l'argument correspondant a $a.

Si je lance le script :
./script.sh arg1 arg2 arg3 arg4

Eh bien j'aimerai qu'a chaque tour de boucle, je puisse afficher l'argument correspondant a la valeur de la variable $a.

a=0
while [ "$a" -le "$#" ]
do
a=$(($a + 1))
<affichage de arg1 si a = 1, affichage de arg2 si a=2, affichage de arg3 si a=3, etc...
done

Merci d'avance de prendre en consideration ma question.
Messages postés
125
Date d'inscription
vendredi 30 mai 2008
Statut
Membre
Dernière intervention
21 mars 2010
18
De rien, à la prochaine.
N'oublies pas de mettre le statut du message en résolu (ça aide les autres).
Humpf, finalement me revoila, avec un souci dans la continuite de mon precedent probleme.

Grace a :
eval echo "\$$a";

J'ai pu afficher ma variable, cependant, je n'arrive toujours pas a travailler dessus.
J'aimerai pouvoir comparer le contenu avec une chaine de caracteres afin d'executer des actions sous certaines conditions :

if [ eval"\$$a" = "-k" ]
then
...
fi

Mais je ne sais pas du tout comment tourner syntaxiquement la chose pour que ca fonctionne.
Est-ce seulement possible ?
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862 > Ilaan
Salut,

Il existe un mécanisme du shell spécialement étudié pour ce que tu veux : getopts
Voir ce thread qui en parle sommairement, ainsi que le man bash (paragraphe sur "getopts").
>
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Travaillant dans le cadre d'un exercice, cette fonction semble faire partie des "interdits". Dommage...

Au besoin je pense que je devrai la recoder... cependant, ca me semble (peut-etre a tord) beaucoup d'efforts pour faire une simple comparaison entre une chaine de caractere et une variable...
Mon probleme etant d'ailleurs simplement que je n'arrive pas a reutiliser cette variable hors d'un :

eval echo "\$$a";

Merci quand meme^^'
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 862 > Ilaan
 if [ $(eval echo "\$$a") = "-k" ];then
>
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Merci jipicy, ca fonctionne.

Eh bien, c'est la deuxieme... peut-etre a plus tard de nouveau ^^'
Je remet "Resolu'.