Shell : boucle et argument,variable

bonobolancinant Messages postés 1 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'aimerais faire une boucle ainsi :
#!/bin/sh
for i in `seq 1 $#`;
do
echo "$$i"
done

C'est à dire que la boucle se répète autant de fois qu'il y a d'arguments, et qu'à chaque passage dans la boucle cela affiche l'argument, cependant je n'arrive pas à le faire avec $$i
Si il y a 3 arguments par exemple je voudrais que cela fasse :
echo $1
echo $2
echo $3
sauf que le 1,2,3 est mon i
Sauf que comme mon i (qui represente 1,2,3) est une variable qui augmente à chaque passage dans la boucle... donc le $$i ne marche pas, quelle est la bonne syntaxe dans ce cas?

Merci d'avance, au revoir.

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Tu peux faire comme indiqué ici :
    https://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script

    #!/bin/sh
    for var in "$@"
    do
        echo "$var"
    done
    


    Attention de manière générale pense à mettre des guillemets autour de tes variables car sinon ça peut faire n'importe quoi. Dans le cas présent si un de tes arguments contient un espace, omettre les guillemets considérera à tort que chaque mot de cet argument est un argument.

    Libre à toi d'incrémenter en plus un compteur dans cette boucle si nécessaire.

    #!/bin/sh 
    echo $@
    
    i=0
    for x in "$@"
    do
        i=`expr $i + 1`
        echo "argument $i: $x"
    done
    


    Attention à ne pas mettre d'espace autour du caractère
    =
    quand tu fais une affectation de variable.

    Bonne chance
    0
  2. CptRomaiin Messages postés 334 Statut Membre 58
     
    Salut,

    Tu peux faire comme ça :

    #!/bin/bash
    
    for i in `seq 1 $#`; 
    do 
        echo ${!i} 
    done

    Ce qui te donnera la valeur des arguments ;)
    0