Script shell - Retour de fonction

Résolu
jax54000 Messages postés 44 Statut Membre -  
Ozerdao Messages postés 4 Statut Membre -
Bonjour,

Je souhaiterais qu'une fonction me retourne une chaine de caractères par exemple.

Qu'existe-t-il comme solution ?

Merci à tous.

A+
Configuration: Windows XP
Internet Explorer 6.0

10 réponses

  1. jpzuate Messages postés 56 Statut Contributeur 51
     
    Bonjour,

    #!/bin/bash 
    # 
    # Note : le #! est obligatoire pour que le variable=$(commande) 
    # soit interprete par le shell 
    # 
    ma_fonction() 
    { 
        if [ ${1} -lt ${2} ] 
        then 
               echo "estpluspetit ${1} ${2}" 
        fi 
    } 
    
    resultat=$(ma_fonction 1 2) 
    
    echo ${resultat} 
    

    Jean-Pierre Zuate
    20
    1. Ozerdao Messages postés 4 Statut Membre 2
       
      Attention cependant à ne pas mettre d'autres instruction "echo" dans la fonction appelée (en guise de traces, par exemple), car sinon, l'affectation dans une variable n'est plus possible, puisqu'il y aurait plus qu'une ligne de valeur de retour.
      0
  2. thorn
     
    salut , en utilisant return :

    fonct() { if [ $1 -lt $2 ] ;then return 2 ;else return 3 ;fi; }

    fonct 10 9 ; echo $?
    renvoie 3

    fonct 9 10 ; echo $?
    renvoie 2

    c'est tres pratique pour gerer des erreures à l'interieur d'une fonction, seulement ,on doit utiliser la reponse de la sortie $? desuite apres
    l'appel de la fonction
    6
  3. Ozerdao Messages postés 4 Statut Membre 2
     
    Attention cependant à ne pas mettre d'autres instructions "echo" dans la fonction appelée (en guise de traces, par exemple), car sinon, l'affectation dans une variable n'est plus possible, puisqu'il y aurait plus qu'une ligne de valeur de retour.

    exemple:
    ma_fonction()
    {
        echo "appel de ma_fonction() avec les parametres $1 et $2."
        if [ ${1} -lt ${2} ]
        then
               echo "estpluspetit ${1} ${2}"
        fi
    }
    
    resultat=$(ma_fonction 1 2)
    


    Dans ce cas, l'affection dans la variable 'resultat' ne marche pas.
    2
  4. thorn
     
    oups excuse-moi , j'ai oublié,
    en utilisant la bonne sortie de $? , on peut donc choisir :

    fonct 10 9 ;
    if [ "$?" == 3 ] ;then .....
    else....
    fi
    ou
    fonct 9 10 ;
    if [ "$?" == 2 ]; then ....
    else...
    fi
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jax54000 Messages postés 44 Statut Membre 1
     
    Encore un petit truc :

    est-il possible, au sein d'une même fonction, d'utiliser echo pour à la fois afficher des messgaes (d'erreurs par ex) et à la fois affecter le retour de la fonction ?

    en d'autres termes est-il possible que "ma_fonction" affiche des messages d'erreurs sur la console en
    l'appelant de cette manière ?
    resultat=$(ma_fonction 1 2)

    Merci à tous les grands chefs !

    A+
    1
  7. jpzuate Messages postés 56 Statut Contributeur 51
     
    Oh yes. Il faut utiliser stderr (>&2) pour rediriger un echo.

    Dans cet exemple on fait un echo "erreur !!!" si l'argument 1 n'est pas plus grand que l'argument 2 et ce sont les paramètres passés au shell qui servent à évaluer le test de ma_fonction.

    Soit donc le code test2.sh :
    #!/bin/bash 
    # 
    # Note : le #! est obligatoire pour que le variable=$(commande) 
    # soit interprete par le shell 
    # 
    ma_fonction() 
    { 
        if [ ${1} -lt ${2} ] 
        then 
               echo "estpluspetit ${1} ${2}" 
        else 
               echo "erreur !!!" >&2 
        fi 
    } 
    
    resultat=$(ma_fonction ${1} ${2}) 
    
    echo ${resultat} 
    


    Exemples :
    * Cas normal d'utilisation : 1 est plus petit que 2, le message s'affiche
    $ ./test2.sh 1 2 
    estpluspetit 1 2 
    

    * On redirige stdout vers /dev/null : 1 est plus petit que 2, le message ne s'affiche pas (il part vers /dev/null)
    $ ./test2.sh 1 2 > /dev/null 
    

    * Mise en évidence de stderr : 11 est plus grand que 2 et on redirige stdout vers /dev/null et le message erreur !!! d'affiche dans stderr qui n'est pas redirigé
    $ ./test2.sh 11 2 > /dev/null 
    erreur !!! 
    


    Voili voilà ...
    Jean-Pierre Zuate
    1
  8. jax54000 Messages postés 44 Statut Membre 1
     
    Le grand maître a répondu : l'élève baisse les yeux, se tait et apprend.

    IMPECCABLE CA !!!!!!!!!!!! tu es LE patron

    Merci tout plein !

    A+
    1
  9. fatpat
     
    salut jaxx,

    si c'est bien en shell que tu veux un retour de fonction voila ce que je te propose (mon exemple est nul, mais il est simple à comprendre) :

    #!/bin/bash
    #
    # fonction qui retourne "oui" si le chiffre passé en 1er argument
    # est plus petit que le chiffre passé en 2eme argument. Elle
    # retourne "non" dans le cas contraire
    #
    function esseplupetit()
    {
    if [ $1 -lt $2 ]
    then echo "oui"
    else echo "non"
    fi
    }

    echo `esseplupetit $1 $2`
    0
  10. jax54000 Messages postés 44 Statut Membre 1
     
    Merci à vous mais :

    - return ne permet que de retourner des valeurs numériques. Je voudrais retourner une chaine de caractères

    - je voudrais mettre le retour de fonction dans une variable : resultat=espluspetit 1 2

    Merci pour vos réponses.

    A+
    0
  11. jax54000 Messages postés 44 Statut Membre 1
     
    Merci,

    Je savais pas que echo permettait ce genre de chose.

    vous êtes les grands chefs
    EL GRANDE SHELL MANITOUS !!

    Re-Merci

    A+
    0