[Shell] problème lié aux variables positionnelles
Résolu
jrdz
-
jrdz -
jrdz -
Bonjour,
Je suis débutant en script shell. Voici mon script shell
Je voudrais qu'il m'affiche
Il s'obstine à afficher seulement
Merci pour vos conseils
Je suis débutant en script shell. Voici mon script shell
bof.sh, qui est en réalité une partie d'un script plus long.
#!/bin/bash
rang=2
echo "$@"
trouve()
{
iter=1
shift
echo "rang cherché $rang "
for i in "$@"
do
if [[ $iter = $rang ]]
then
echo " $i"
break
fi
((iter=iter+1))
done
return
}
trouve $rang $@
Je voudrais qu'il m'affiche
b clorsque je le fais fonctionner avec :
./bof.sh a 'b c' d
Il s'obstine à afficher seulement
b.
Merci pour vos conseils
1 réponse
-
Bonjour,
N'oublie pas d'entourer ton code avec les balises de code (4e bouton au dessus de la boîte dans laquelle tu tapes ton message). Veille également à l'indenter correctement.
Pour résoudre ton problème, il suffit de s'inspirer de ce lien.
#!/bin/bash rang=2 echo "$@" trouve() { iter=1 shift echo "rang cherché $rang" for var in "$@" do if [[ "$iter" -eq "$rang" ]] then echo "$var" break fi ((iter=iter+1)) done } trouve $rang "$@"
Note que pour passer$@
à la fonctiontrouve
, les guillemets sont importants. De manière générale, je t'invite à ne pas injecter le contenu d'une variable shell sans l'entourer de guillemets, car cela permet potentiellement d'injecter du code frauduleux, ou dans le cas présent, peut mener à des comportements autre que celui prévu.
Enfin, note qu'en toute rigueur et comme expliqué dans ce lien, tu es supposé utilisé l'opérateur-eq
pour faire une comparaison numérique.
Bonne chance