Shell : boucle et argument,variable
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.
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:
- Shell infrastructure host c'est quoi
- Bug Windows 11 : sihost.exe fait chuter les performances - Guide
- Fichier host - Guide
- Classic shell - Télécharger - Personnalisation
- Modern setup host c'est quoi - Forum Windows 10
- Cette action ne peut pas être réalisée car le fichier est ouvert dans shell infrastructure host - Guide
2 réponses
Tu peux faire comme indiqué ici :
https://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script
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.
Attention à ne pas mettre d'espace autour du caractère
Bonne chance
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
Salut,
Tu peux faire comme ça :
Ce qui te donnera la valeur des arguments ;)
Tu peux faire comme ça :
#!/bin/bash
for i in `seq 1 $#`;
do
echo ${!i}
done
Ce qui te donnera la valeur des arguments ;)
Marche aussi, mais seulement en bash, contrairement à :
https://forums.commentcamarche.net/forum/affich-30893579-shell-boucle-et-argument-variable#1
https://forums.commentcamarche.net/forum/affich-30893579-shell-boucle-et-argument-variable#1