[Shell] problème lié aux variables positionnelles [Résolu]

Signaler
-
 jrdz -
Bonjour,

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 c
lorsque je le fais fonctionner avec :

./bof.sh a 'b c' d


Il s'obstine à afficher seulement
b
.

Merci pour vos conseils

1 réponse

Messages postés
29878
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
9 juin 2021
7 120
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 fonction
trouve
, 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
merci , problème résolu ; merci pour les liens en particulier pour le 2ième qui m'a aussi aidé