Script shell - Retour de fonction

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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
    1. 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.
  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.
    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. Contributeur
        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. 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. Merci,

            Je savais pas que echo permettait ce genre de chose.

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

            Re-Merci

            A+
            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+
              1. 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. 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
                  1. 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`