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. 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`
    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. 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. 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. Merci,

            Je savais pas que echo permettait ce genre de chose.

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

            Re-Merci

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