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 :

Mettre un nom de paramètre dans la déclaration de fonction


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut Mettre un nom de paramètre dans la déclaration de fonction
    Bonjour,

    Je voudrais savoir comment déclarer une fonction avec un nom de paramètre (pour ne plus utiliser $1 ou un autre nombre et pour mettre les paramètres dans n'importe quel ordre) ?

    par exemple: monScript.sh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fonction(val) {
     
         echo $val 
     
    }
     
    fonction val="hello"
     
    ---
     
    $ ./monScript.sh 
    hello

  2. #2
    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 801
    Points
    30 801
    Par défaut
    Regarde du côté des options et de leurs arguments.
    Il faudra aors passer par la commande getopt.
    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.

  3. #3
    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 387
    Points
    19 387
    Par défaut
    mettre les paramètres dans n'importe quel ordre
    eh, ben, ça va être propre !

    en effet, avec des options et getopts, mais ça va alourdir le code.

    pourquoi ne [pv]eux-tu pas passer les arguments dans l'ordre ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    Bonjour,

    Je connais getops mais je pensais que c'était pour mettre en place des options/arguments lorsqu'on appelle un script.

    Quand je parlais de mettre les arguments dans le désordre je pensais lors de l'appelle de la fonction,
    fonction(val1, val2) { echo $val1 $val2 )
    lorsqu'on appelle la fonction fonction val2="world" val1="hello"

    je ne vois pas trop comment utiliser les getops pour une fonction si on a déjà utiliser getops pour le script


    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
     
    # option pour l'appelle du script
    while getopts 'a:' opt; do
       case $opt in
         a) a=$OPTARG ;;
      esac
     done
     shift $((OPTIND-1))
     
    # la fonction
    # testFunction(val1, val2){
    #  echo $val1 $val2
    # }
     
    # testFunction val2="world" val1="hello"

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    lorsqu'on appelle la fonction fonction val2="world" val1="hello"
    Quel est l'intérêt d'écrire fonction val2="hello" val1="world" plutôt que fonction "hello" "world" ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    Bonjour,

    C'était pour savoir si c'était possible de la faire ^^ .

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    quand tu appelles une fonction les paramètres sont stockés sur la pile, en langage C par exemple tu dois définir dans le prototype de la fonction le type de tes paramètres et leur coller un label, leur donner un nom explicite

    en bash ça fonctionne pas comme ça, la fonction est juste un point d'entrée et extirper les paramètres pour les copier dans des variables avec un nom explicite est laissé au programmeur, bash met à disposition des tokens spécifiques pour accéder aux paramètres locaux à la fonction, comme $*, $@, shift ou les arguments positionnels $1, $2, $3 etc.

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function coin() {
       param1=$1
       param2=$2
       param3=$3
       echo "$param1, $param2 - $param3"
    }
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function pouet() {
       param1=$1; shift
       param2=$1; shift
       param3=$1; shift
       echo "$param1, $param2 - $param3"
    }
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function gruik() {
       declare -a param
       param=("$@")
       echo "${param[0]}, ${param[1]} - ${param[2]}"
    }

  8. #8
    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 387
    Points
    19 387
    Par défaut
    si les paramètres ne subissent pas de modification au sein de la fonction, on peut les passer en tant que variables d'environnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ maFonc() { var1="Hello"; echo "$var1 $var2";}
    $ var2="World!" var1="Salut" maFonc
    Hello World!
    $ echo "$var1"
    Salut
    $
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    Bonjour,

    ok, merci de vos aides.

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

Discussions similaires

  1. mettre des noms aux équations dans word 2007
    Par bendesarts dans le forum Word
    Réponses: 23
    Dernier message: 10/05/2010, 09h10
  2. [Toutes versions] mettre le nom du fichier dans le document word sans le .DOC
    Par pkpk94 dans le forum Word
    Réponses: 7
    Dernier message: 09/02/2010, 13h30
  3. [AXIS][ANT]- nom des paramètres dans le wsdl
    Par anaon dans le forum Services Web
    Réponses: 0
    Dernier message: 15/09/2008, 10h58
  4. Réponses: 35
    Dernier message: 17/02/2006, 18h39
  5. Mettre le nom du fichier dans TextEdit ?? Avec CFileDialog
    Par P'tit Troll dans le forum Windows
    Réponses: 2
    Dernier message: 19/04/2005, 17h32

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