Les Allergies
Alimentaires
Posez votre question Signaler

Script shell - Retour de fonction [Résolu]

jax54000 28Messages postés 23 mars 2007Date d'inscription - Dernière réponse le 15 sept. 2010 à 09:46
Bonjour,
Je souhaiterais qu'une fonction me retourne une chaine de caractères par exemple.
Qu'existe-t-il comme solution ?
Merci à tous.
A+
Lire la suite 

Script shell - Retour de fonction »

11 réponses
Réponse
+17
moins plus
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} 

Ozerdao- 15 sept. 2010 à 09:43
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.
Ajouter un commentaire
Réponse
+2
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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`
Ajouter un commentaire
Réponse
+0
moins plus
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+
Ajouter un commentaire
Réponse
+0
moins plus
Merci,

Je savais pas que echo permettait ce genre de chose.

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

Re-Merci

A+
Ajouter un commentaire
Réponse
+0
moins plus
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+
Ajouter un commentaire
Réponse
+0
moins plus
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+
Ajouter un commentaire
Ce document intitulé « Script shell - Retour de fonction » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?