Shell : boucle et argument,variable

Fermé
bonobolancinant Messages postés 1 Date d'inscription vendredi 10 octobre 2014 Statut Membre Dernière intervention 10 octobre 2014 - 10 oct. 2014 à 11:13
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 10 oct. 2014 à 11:35
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.
A voir également:

2 réponses

mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
Modifié par mamiemando le 10/10/2014 à 11:33
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
CptRomaiin Messages postés 315 Date d'inscription mercredi 23 octobre 2013 Statut Membre Dernière intervention 28 avril 2016 58
10 oct. 2014 à 11:33
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
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
10 oct. 2014 à 11:35
0