[Shell] problème lié aux variables positionnelles

Résolu
jrdz -  
 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

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    1
    1. jrdz
       
      merci , problème résolu ; merci pour les liens en particulier pour le 2ième qui m'a aussi aidé
      0