Script shell - Retour de fonction [Résolu/Fermé]

Signaler
Messages postés
44
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
24 mai 2008
-
Messages postés
3
Date d'inscription
mardi 27 juillet 2010
Statut
Membre
Dernière intervention
15 septembre 2010
-
Bonjour,

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

Qu'existe-t-il comme solution ?

Merci à tous.

A+

10 réponses

Messages postés
56
Date d'inscription
dimanche 4 mars 2007
Statut
Contributeur
Dernière intervention
9 juin 2008
49
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
19
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 66686 internautes nous ont dit merci ce mois-ci

Messages postés
3
Date d'inscription
mardi 27 juillet 2010
Statut
Membre
Dernière intervention
15 septembre 2010
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.
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
Messages postés
3
Date d'inscription
mardi 27 juillet 2010
Statut
Membre
Dernière intervention
15 septembre 2010
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.
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
Messages postés
44
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
24 mai 2008
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+
Messages postés
56
Date d'inscription
dimanche 4 mars 2007
Statut
Contributeur
Dernière intervention
9 juin 2008
49
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
Messages postés
44
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
24 mai 2008
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+
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`
Messages postés
44
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
24 mai 2008
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+
Messages postés
44
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
24 mai 2008
1
Merci,

Je savais pas que echo permettait ce genre de chose.

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

Re-Merci

A+