Script Shell, utilisation de variables

Résolu/Fermé
Ilaan - 19 janv. 2009 à 11:39
 Ilaan - 19 janv. 2009 à 15:36
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 ?
A voir également:

3 réponses

farwarx Messages postés 125 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 21 mars 2010 18
19 janv. 2009 à 11:57
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 beaucoup Farwarx, c'est exactement ce que je cherchais a faire.
A la prochaine, peut-etre ^^'
0
farwarx Messages postés 125 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 21 mars 2010 18
19 janv. 2009 à 11:47
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.
0
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.
0
farwarx Messages postés 125 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 21 mars 2010 18
19 janv. 2009 à 12:03
De rien, à la prochaine.
N'oublies pas de mettre le statut du message en résolu (ça aide les autres).
0
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 ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894 > Ilaan
19 janv. 2009 à 15:01
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").
0
Ilaan > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
19 janv. 2009 à 15:16
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^^'
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894 > Ilaan
19 janv. 2009 à 15:33
 if [ $(eval echo "\$$a") = "-k" ];then
0
Ilaan > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
19 janv. 2009 à 15:36
Merci jipicy, ca fonctionne.

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