Script Shell, utilisation de variables

Résolu
Ilaan -  
 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 ?
Configuration: FreeBSD
Firefox 2.0.0.6

3 réponses

  1. farwarx Messages postés 129 Statut Membre 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
    1. Ilaan
       
      Merci beaucoup Farwarx, c'est exactement ce que je cherchais a faire.
      A la prochaine, peut-etre ^^'
      0
  2. farwarx Messages postés 129 Statut Membre 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.
    0
    1. Ilaan
       
      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
  3. farwarx Messages postés 129 Statut Membre 18
     
    De rien, à la prochaine.
    N'oublies pas de mettre le statut du message en résolu (ça aide les autres).
    0
    1. Ilaan
       
      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
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > 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").
        0
      2. Ilaan > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
      3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > Ilaan
         
         if [ $(eval echo "\$$a") = "-k" ];then
        0
      4. Ilaan > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci jipicy, ca fonctionne.

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