Script shell - Retour de fonction
Résolu
jax54000
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
Ozerdao Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Ozerdao Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaiterais qu'une fonction me retourne une chaine de caractères par exemple.
Qu'existe-t-il comme solution ?
Merci à tous.
A+
Je souhaiterais qu'une fonction me retourne une chaine de caractères par exemple.
Qu'existe-t-il comme solution ?
Merci à tous.
A+
A voir également:
- Return bash
- Fonction si et - Guide
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Retour à la ligne excel formule - Guide
10 réponses
Bonjour,
Jean-Pierre Zuate
#!/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
Ozerdao
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
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
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
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:
Dans ce cas, l'affection dans la variable 'resultat' ne marche pas.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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+
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+
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 :
Exemples :
* Cas normal d'utilisation : 1 est plus petit que 2, le message s'affiche
* On redirige stdout vers /dev/null : 1 est plus petit que 2, le message ne s'affiche pas (il part vers /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é
Voili voilà ...
Jean-Pierre Zuate
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
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+
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`
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`