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 :

Ksh Retour de fonction


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 52
    Points
    52
    Par défaut Ksh Retour de fonction
    Bonjour ,
    Dans mon fichier Ksh j'ai une fonction nomée Stats.
    Je créer ma fonction comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     function stats 
    {
    ......
    }
    La fonction fonctionne, je voudrai pouvoir récuperer la valeur du retour de la fonction .
    Genre ;
    If retour function Stats = 0 then echo "function réussi"
    else echo "function échoué".

    Je ne vois pas trop comment je pourrai traduire cela en langage script KSH .

    Merci d'avance si quelqu'un a une idée

  2. #2
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Bonjour,

    Y a pleins de trucs sur Internet sur les fonctions:
    sur developpez.com aussi d'ailleurs :p
    Ou ici

  3. #3
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    tu peux utiliser $? pour avoir le code de retour de la dernière commande executée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     function stats 
    {
    ......
    return 255
    }
    
    
    ...
    
    stats
    echo $?
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 52
    Points
    52
    Par défaut
    Merci de m'avoir répondu aussi rapidement,
    j'ai bien utilisé $? mais j'ai tjs le meme retour chiffre 0 , meme si la fonction ne s'execute pas et bien le code retour vaut 0.
    Dans la fonction je fais un "exec proc Nomprocedure", mais je ne fais pas de return , je devrai faire un return , mais un return de exec proc nomprocedure , oui mais comment ?

    Merci

  5. #5
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Bon, exemple pourri, mais ça devrait suffire j'espère :
    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
    16
    17
    18
    19
    20
    21
    22
     
    $ cat test.ksh
    #!/bin/ksh
     
    function TestRetour {
    #Dans la fonction, j'affiche le premier paramètre et je renvoie le second
            echo $1 :
            return $2
    }
    #Appel à la fonction TestRetour avec 2 paramètres : la chaine valeur et le premier paramètre passé au script
    TestRetour valeur $1
     
    #$? prend la valeur renvoyé par TestRetour, c'est à dire la valeur du return
    if [ $? -ne 0 ]; then
            echo KO
    else
            echo OK
    fi
    $ ./test.ksh 1
    KO
    $ ./test.ksh 0
    OK

  6. #6
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    en enrichissant un peu le code d'alek-C, en remontant le status de ce que tu execute dans la fonction ça devrais le faire je pense.

    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
    16
    17
    18
    19
    20
     
    #!/bin/ksh
     
    function TestRetour {
        exec proc wasa mon truc de la mort qui tue la vie    
        status=$?
        return $status
    }
     
    TestRetour $1
     
    if [ $? -eq 1 ]; then
            echo KO
    else
            echo OK
    fi
    $ ./test.ksh 1
    KO
    $ ./test.ksh 0
    OK
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    return n'accepte pas de valeur au delà de 255, à 256 il repasse à 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    maFonction () { return $1; }
    maFonction 512
    echo $?
    0
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    return n'accepte pas de valeur au delà de 255, à 256 il repasse à 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    maFonction () { return $1; }
    maFonction 512
    echo $?
    0
    Exact la valeur est forcément entre 0 et 255 (standard unix) si ton programme sors avec une valeure hors du scope, la valeur que tu verra sera la valeur de retour modulo 256 pour le faire entrer dans le range 0-255.

    0 sert à indiquer que ton programme s'est exécuté correctement, autre chose sinon.
    http://users.info.unicaen.fr/~jacque...ml#EXIT-STATUS

    Certains statuts de retour ont une signification réservée, cependant c'est rarement suivi par les développeurs lambda par méconnaissances du sujet.
    http://tldp.org/LDP/abs/html/exitcod...l#EXITCODESREF

    Il m'est arrivé d'avoir a déboguer un paquet de programme qui ne suivaient pas le standard
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    Certains statuts de retour ont une signification réservée, cependant c'est rarement suivi par les développeurs lambda par méconnaissances du sujet.
    http://tldp.org/LDP/abs/html/exitcod...l#EXITCODESREF
    Toutefois, tes sources se réfèrent à bash... et menakikou utilise ksh
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  10. #10
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Effectivement pou ksh ils précisent juste qu'il y'a une erreur si c'est différent de zéro, snas pour autant indiquer le range....

    http://www.research.att.com/sw/downl.../man1/ksh.html

    EXIT STATUS

    Errors detected by the shell, such as syntax errors, cause the shell to return a non-zero exit status. If the shell is being used non-interactively, then execution of the shell file is abandoned unless the error occurs inside a subshell in which case the subshell is abandoned. Otherwise, the shell returns the exit status of the last command executed (see also the exit command above). Run time errors detected by the shell are reported by printing the command or function name and the error condition. If the line number that the error occurred on is greater than one, then the line number is also printed in square brackets ([]) after the command or function name.


    ici une aide appréciable pour le korn shell
    http://www.versageek.com/ksh_munix.html


    EDIT: QUOIQUE EN FOUILLANT UN PEU

    man exit ksh sur solaris
    http://www.calpoly.edu/cgi-bin/man-cgi?exit+2

    sh
    exit [n]

    return [n]

    csh
    exit [ ( expr )]

    goto label

    ksh
    *exit [n]

    *return [n]
    ....

    ksh
    exit will cause the calling shell or shell script to exit
    with the exit status specified by n. The value will be the
    least significant 8 bits of the specified status
    . If n is
    omitted then the exit status is that of the last command
    executed. When exit occurs when executing a trap, the
    last command refers to the command that executed before the
    ....
    return causes a shell function or '.' script to return to
    the invoking script with the return status specified by n.
    The value will be the least significant 8 bits of the speci-
    fied status.
    If n is omitted then the return status is that
    of the last command executed. If return is invoked while
    not in a function or a '.' script, then it is the same as an
    exit.
    8 bits ==> 0 - 255 ou -128 +127 (dans l'hypothèse de la numérotation classique)

    faut juste espérer que ce soit relatif a la dernière version
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

Discussions similaires

  1. ksh, retours de fonctions et retour chariot
    Par Seboss dans le forum Linux
    Réponses: 1
    Dernier message: 05/04/2007, 16h12
  2. [syntaxe] tableau et retour de fonction
    Par BainE dans le forum C++
    Réponses: 4
    Dernier message: 08/12/2005, 16h01
  3. Retour de fonction en C
    Par troumad dans le forum Linux
    Réponses: 2
    Dernier message: 06/11/2005, 21h43
  4. Utilisation d'un retour de fonction dans un decode
    Par CFVince dans le forum Oracle
    Réponses: 4
    Dernier message: 20/10/2005, 17h22
  5. Référence en retour de fonction, à transformer en hash
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 15/07/2005, 14h24

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