Rechercher : dans
Par :

Script shell - Retour de fonction

Dernière réponse le 25 mar 2007 à 15:21:29 jax54000, le 23 mar 2007 à 22:48:55 
 Signaler ce message aux modérateurs

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

1

fatpat, le 23 mar 2007 à 23:30:30

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`

Répondre à fatpat

2

thorn, le 24 mar 2007 à 01:15:33

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

Répondre à thorn

3

thorn, le 24 mar 2007 à 01:26:46

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

Répondre à thorn

4

jax54000, le 24 mar 2007 à 09:53:56

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+

Répondre à jax54000

5

jpzuate, le 24 mar 2007 à 10:52:55
  • +6

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
La Fage Conseil

Répondre à jpzuate

6

jax54000, le 25 mar 2007 à 11:13:44

Merci,

Je savais pas que echo permettait ce genre de chose.

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

Re-Merci

A+

Répondre à jax54000

7

jax54000, le 25 mar 2007 à 11:22:59

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+

Répondre à jax54000

8

jpzuate, le 25 mar 2007 à 11:49:28
  • +1

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
La Fage Conseil

Répondre à jpzuate

9

 jax54000, le 25 mar 2007 à 15:21:29

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+

Répondre à jax54000