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 :

ecrire une fonction


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut ecrire une fonction
    excusez mon ignorance, mais comment retourner une valeur pour une fonction

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    My_function
    {
    echo "<value>12</value1>" | cut -f2 -d ">" | cut -f1 -d "<"
    }
    comment avoir le resultat de ma fonction dans une variable??
    return?? je n'y arrive pas

    Merci

  2. #2
    Membre éclairé Avatar de Vespasien
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 383
    Par défaut
    Le divin google m'a permi de trouver ceci:
    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
    #!/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}
    Comme çà m'a instruit, je le met.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    Non, ceci n'est pas propre du tout

    Imagine que je veuille écrire un truc à l'écran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ma_fonction()
    {
    echo Hello    
    if [ ${1} -lt ${2} ]
        then
               echo "estpluspetit ${1} ${2}"
        fi
    }
     
    resultat=$(ma_fonction 1 2)
     
    echo ${resultat}
    Ainsi, tu vas avoir à l'écran
    Hello 1


    Tu vois le challenge?
    Ce que tu fais c'est plutot du bricolage ...

    Il doit surement y avoir un moyen de faire ceci proprement..
    je n'arrive pas à trouver, et je commence à me dire que le shell n'est pas fait pour gérer ceci

  4. #4
    Membre éclairé Avatar de Vespasien
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 383
    Par défaut
    J'ai testé ton morceau de code et je n'obtiens que:
    Hello

    Mais tu aussi faire ton script en Perl. Si tu veux faire du scripting qui soit propre, je doute qu'il faille utiliser le shell.

  5. #5
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOO=`echo "<value>12</value1>" | cut -f2 -d ">" | cut -f1 -d "<"`
    echo $FOO

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    Le problème c'est pas d'afficher le résultat.. ça tout le monde peut faire

    C'est le fait d'écrire la fonction pour l'utiliser plus tard qui est plus dur..
    Et comme dit Vespasien, je doute aussi que le shell soit adapté.

    Bon, j'ai fait qqes recherches sur le net.
    Il s'avère que beaucoup confirment cette réponse (pas de fonctions qui retournent un string en shell), par contre pour contourner ceci, on peut utiliser le fait que toutes les variables dans korn shell sont globales...
    Donc, si on affecte une valeur à une variable dans une fonction, elle sera visible même en dehors de cette fonction...

    ce qui veut dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Myfunction()
    {
    .....
    result="..."
    }
     
    echo $result

    Est ce que vous confirmez que c'est la seule parade possible pour écrire une fonction en shell??


    Merci

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    oui une fonction shell ne peut pas retourner autre choses qu'une valeur de 0 à 255 via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Myfunction()
    {
    .....
    return 4
    }
    echo $?
    le $? contient le code retour
    sinon via les variable oui mais attention selon le shell -ksh ou bash) le comportement peut varier
    il vaut mieux déclarer la variable avant la déclaration de la fonction, en effet une variable peut être local a une fonction ^^

Discussions similaires

  1. Ecrire une fonction d'accès à un membre
    Par dhoorens dans le forum C++
    Réponses: 3
    Dernier message: 01/01/2007, 19h01
  2. [javascript] Ecrire une fonction "include"
    Par gscorpio dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/10/2006, 10h49
  3. [VB6]Ecrire une fonction dans ma feuille Excel
    Par ToxiK dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/06/2006, 20h04
  4. Réponses: 1
    Dernier message: 07/06/2006, 18h18
  5. Réponses: 15
    Dernier message: 15/12/2005, 14h36

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