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
A voir également:

4 réponses

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

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

$ B=Bonjour

$ echo ${A}
B

$ echo ${!A}
Bonjour
0
Utilisateur anonyme
 
Ah d'accord
0
Flachy Joe Messages postés 2303 Statut Membre 261
 
Salut,
révise tes cours sur les tableaux...
0
Samefly
 
Je n'ai pas eu de cours sur le shell ou sur les tableaux..
0
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
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
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
Samefly
 
while (test "$#" -gt 0)
do
echo $1
shift
done

Merci CCM.
0