Problème de script aidez moi s'il vous plait

Samefly -  
 Utilisateur anonyme -
Bonjour tout le monde !

Bon voilà j'ai un petit script à faire pour les cours en shell qui demande d'afficher les arguments dans l'ordre lexicographique. Le script n'est pas compliqué en effet mais j'ai quelque soucis de syntaxe. Voici mon script :

for (( i=1; i<=$#; i++ ))
do
echo $$i ---> (c'est ici que ça foire je n'arrive pas à faire comprendre à la machine qu'il faut interpréter $$i soit $1 , $2 , $3, etc)

done

Si quelqu'un aurait la solution ça serait cool de la partager ! Je lui fais des bisous en échange :-D

4 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    for (( i=1; i<=$#; i++ )); do echo ${!i}; done
    3
    1. Utilisateur anonyme
       
      Qu'est ce que le "!" ? pourquoi $i ne fonctionne pas à l'interieur des accolades ?
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > Utilisateur anonyme
         
        Salut,

        Le
        !
        est une indirection. C'est le pendant de la commande eval utilisée à l'époque.
        0
    2. Utilisateur anonyme
       
      Je ne comprends pas comment ça fonctionne, d'autres exemples que ceux du lien ?
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > Utilisateur anonyme
         
        $ A=B

        $ B=Bonjour

        $ echo ${A}
        B

        $ echo ${!A}
        Bonjour
        0
    3. Utilisateur anonyme
       
      Ah d'accord
      0
  2. Flachy Joe Messages postés 2303 Statut Membre 261
     
    Salut,
    révise tes cours sur les tableaux...
    0
    1. Samefly
       
      Je n'ai pas eu de cours sur le shell ou sur les tableaux..
      0
  3. Samefly
     
    Merci Flachy Joe j'ai trouvé la solution en parcourant la liste $* avec le for :

    for i in $*
    do
    echo $i
    done

    Je dois faire la même chose avec le tant que et la pareil je suis bloqué avec cette histoire de $$i
    0
    1. Utilisateur anonyme
       
      salut,

      il est préférable de parcourir
      $@
      :
      $ maFonc() { for i in $*; do echo "$i"; done; }
      $ maFonc bla 'bla bla' bla
      bla
      bla
      bla
      bla
      $ maFonc() { for i in "$@"; do echo "$i"; done; }
      $ maFonc bla 'bla bla' bla
      bla
      bla bla
      bla
      $
      et d'utiliser des guillemets !
      0
  4. Samefly
     
    J'ai trouvé une solution sur un autre forum (désolé mais jeuxvidéo.com est plus rapide que vous malheureusement) :
    while [ $# > 0 ]
    Do
    Écho $1
    Shift
    Done

    ça me semble correct mais lorsque je lance mon script dans le terminal celui ci semble coincé dans une boucle infini
    0
    1. Samefly
       
      while (test "$#" -gt 0)
      do
      echo $1
      shift
      done

      Merci CCM.
      0