IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comment capter les codes retours affectés aux RETURN des Fonctions extérieurs, par une MainProg


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 263
    Points : 107
    Points
    107
    Par défaut Comment capter les codes retours affectés aux RETURN des Fonctions extérieurs, par une MainProg
    Bonjour à tous,

    afin de finaliser le projet, qui m'a été confié.

    je souhaiterais savoir, qu'elle serait la meilleure façon de capter, les codes retours affectés à des RETURN dans différentes fonctions ( voir l'exemple de 3 fonctions).

    en sachant que je source ma bibliothèque de fonction dans ma MainProg.

    exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    f1 {
    echo "fonction f1"
    RETURN 255
    }
     
    f2{
    echo "fonction f2"
    RETURN 254
    }
     
    f3{
    echo "fonction f3"
    RETURN 253
    }
    ci-dessous c'est plus ou moins le schéma que je dois suivre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    et bien sur, dans la MainProg.sh il y a un 
     
           case $VAR  in 
     "255")
     action imposé par DBA 
     ;;
     "254")
     action imposé par DBA
     ;;
     "253")
    action imposé par DBA 
     ;;
    esac
    Merci a tous idées, car je dois suivre cette trame , en sachant que j'ai au moins 40 fonctions déjà travaillées

    Cordialement

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Bonjour,

    return est aux fonctions ce que exit est aux scripts.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonsoir.

    Pour détailler un peu plus, contrairement à beaucoup de langages de programmation les langages shells de type bash/ksh ou autres ne permettent pas de retourner des valeurs de tout type dans les fonctions au sens stricte du terme. L'instruction return comme exit permet seulement de retourner une valeur entre 0 et 255. Cela correspond au "statut" de la fonction (0 quand la fonction s'est correctement exécuté sinon une autre valeur qui est généralement 1). Si c'est cette valeur que tu as besoin de récupérer il faut passer par la variable $? à l'instar de l'instruction de l'exécution d'une commande ou d'un script qui fait exit.

    En revanche, si tu veux retourner n'importer quoi, une chaine de caractère par exemple, il est possible de simuler cela à l'aide d'un echo et d'une "sous-exécution" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    f(){
        nom="$1"
        age="$2"
        [[ $age -ge 18 ]] && echo "$nom est majeur" || echo "$nom est mineur"
    }
     
    var1=$(f "pierre" "19")  # $var1 contiendra "pierre est majeur"
    var2=$(f "paul" "17")  # $var2 contiendra "paul est mineur"
    Cordialement,
    Idriss

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 279
    Points : 12 727
    Points
    12 727
    Par défaut
    Bonjour,

    Comme déjà précisé par ok.Idriss, pour récupérer la valeur d'un return:
    Mais je serais curieux de savoir comment tu vas faire pour appeler plusieurs fonctions qui vont chacune te retourner un code différent,ceci dans la même variable pour ensuite passer dans ton case, a mon avis, la difficulté est plus à ce niveau...
    Cordialement.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par amateur_will Voir le message
    Merci a tous idées, car je dois suivre cette trame , en sachant que j'ai au moins 40 fonctions déjà travaillées
    Citation Envoyé par disedorgue Voir le message
    Mais je serais curieux de savoir comment tu vas faire pour appeler plusieurs fonctions qui vont chacune te retourner un code différent,ceci dans la même variable pour ensuite passer dans ton case, a mon avis, la difficulté est plus à ce niveau...
    Bonjour
    disedorgue a posé le doigt sur un vrai problème dans ta conception.
    En effet, la valeur affectée au return d'une fonction permet d'indiquer à l'appelant ce qui a cloché dans l'exécution de la fonction. Par exemple un return 1 pourra signifier que la fonction n'a pas pu créer le dossier nécessaire, un return 2 signifiera que le dossier a bien été créé (puisque l'étape du return 1 aura été franchie avec succès) mais qu'elle n'aura pas pu y copier le fichier demandé. Et etc etc.
    Et donc l'appelant, recevant sa valeur dans $?, pourra (s'il le désire) affiner sa gestion de l'erreur en fonction de la valeur récupérée.

    Mais une autre fonction pourra renvoyer 1 pour une autre raison, 2 pour encore une autre et etc. Bref les valeurs renvoyées dépendent aussi de la fonction invoquée.

    Toi, tu as des fonctions différentes, renvoyant chacune une valeur différentes entre elles mais unique pour chaque fonction. Si tu appelles f1, et qu'ensuite tu appelles f2, ben t'as pas besoin de case. Tu sais que la valeur renvoyée est alors 254. Et ça, tu le sais non pas parce que tu regardes $? mais parce que la dernière fonction a avoir été appelée ne pouvait renvoyer que 254...

    Bref en fait on comprend mal comment tu conçois ton truc quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 263
    Points : 107
    Points
    107
    Par défaut
    re bonjour,

    donc merci à Sev@r; disedorgue, et OK-idriss d'avoir, argumentés se post..

    effectivement, l'interrogation mise par disedorgue était conséquente.

    j'ai calqué un semblant de fonctionnement, avec la piste de OK-Idriss dans son exemple donné.

    mais toutes les remarques, ont été enrichissantes.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par amateur_will Voir le message
    j'ai calqué un semblant de fonctionnement, avec la piste de OK-Idriss dans son exemple donné.
    Bah, montre-nous et peut-être qu'on pourra donner des conseils d'amélioration...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/08/2012, 18h43
  2. Comment renvoyer un code retour?
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/12/2006, 16h49
  3. comment exploiter les codes d'erreurs sous windows xp?
    Par lejum2005 dans le forum Windows XP
    Réponses: 4
    Dernier message: 03/03/2006, 17h26
  4. Comment gérer les codes postaux sous access?
    Par Jac_S_69 dans le forum Access
    Réponses: 3
    Dernier message: 01/12/2005, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo