Rechercher : dans
Par :

Script Shell, utilisation de variables

Dernière réponse le 19 jan 2009 à 15:36:34 Ilaan, le 19 jan 2009 à 11:39:15 
 Signaler ce message aux modérateurs

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 ?

Configuration: FreeBSD
Firefox 2.0.0.6

Meilleures réponses pour « Script Shell, utilisation de variables » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...

1

farwarx, le 19 jan 2009 à 11:47:12

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.

Répondre à farwarx

2

Ilaan, le 19 jan 2009 à 11:54:49

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.

Répondre à Ilaan

3

farwarx, le 19 jan 2009 à 11:57:33

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.

Répondre à farwarx

4

Ilaan, le 19 jan 2009 à 12:00:44

Merci beaucoup Farwarx, c'est exactement ce que je cherchais a faire.
A la prochaine, peut-etre ^^'

Répondre à Ilaan

5

farwarx, le 19 jan 2009 à 12:03:32

De rien, à la prochaine.
N'oublies pas de mettre le statut du message en résolu (ça aide les autres).

Répondre à farwarx

6

Ilaan, le 19 jan 2009 à 14:55:25

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 ?

Répondre à Ilaan

7

jipicy, le 19 jan 2009 à 15:01:38

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").
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

8

Ilaan, le 19 jan 2009 à 15:16:04

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^^'

Répondre à Ilaan

9

jipicy, le 19 jan 2009 à 15:33:53

 if [ $(eval echo "\$$a") = "-k" ];then
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

10

 Ilaan, le 19 jan 2009 à 15:36:34

Merci jipicy, ca fonctionne.

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

Répondre à Ilaan
Collection CommentÇaMarche.net