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 :

Lancement script avec condition et paramètre


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Avatar de dexter74
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Billets dans le blog
    3
    Par défaut Lancement script avec condition et paramètre
    Bonjour,

    J'ouvre ce fil car j'arrive pas à trouver ce que je cherche .

    Je souhaiterai faire du lancement via des paramètre du type --PARAMETRE1=XXXX

    Le PARAMETRE1 déclenchera telle action selon la valeur .

    Merci d'avance pour vos réponses, ma question semble bête mais indispensable .

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    • Si tu es sûr de commencer par une action, il sera moins difficile de traiter le premier paramètre, $1, sans gestion d'option.
    • Si getopt est installé, cela peut être ta solution. Il gère les options longues. man getopt.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      GETOPT(1)
       
      NOM
             getopt - Analyser des options de lignes de commandes (version améliorée)
    • Sinon, il reste getopts qui ne gère que les options courtes. Mais on peut imiter le comportement des options longues en considérant le tiret comme une option. Il faudra ensuite parser autour du signe égal.


    Bonne chance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    il est aussi possible de définir parametre1 en tant que variable d'environnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $ parametre1=xxx /chemin/monScript
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    • Si getopt est installé, cela peut être ta solution.
    Sur un vieux bash (genre 3.2.57), avec un vieux getopt qui ne gère que les options courtes (-a -b etc.), on peut aussi réinventer la roue:

    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
    #!/bin/bash
     
    # Usage: $0 --PARAMETRE1=XXXX
     
    param1=DEFAULT
     
    if [[ $1 =~ --PARAMETRE1=.* ]]
    then
      param1=${1#--PARAMETRE1=}; shift
      #echo "$param1"
    fi
     
    case "$param1" in
      (XXXX) echo "je vais faire du XX";;
      (YYYY) echo "je vais faire du YY";;
      (DEFAULT) echo "je vais faire du defaut";;
      (*) echo "je vais faire une action non prevue '$param1'";;
    esac
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ ./test1.sh --PARAMETRE1=XXXX
    je vais faire du XX
    $ ./test1.sh --PARAMETRE1=YYYY
    je vais faire du YY
    $ ./test1.sh --PARAMETRE1=ZZZZ
    je vais faire une action non prevue 'ZZZZ'
    $ ./test1.sh
    je vais faire du defaut

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Sur un vieux bash (genre 3.2.57), avec un vieux getopt qui ne gère que les options courtes (-a -b etc.)
    getopt n'est pas une commande bash; c'est getopts la commande bash, et elle ne gère toujours que les options courtes.

    on peut aussi réinventer la roue:

    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
    #!/bin/bash
     
    # Usage: $0 --PARAMETRE1=XXXX
     
    param1=DEFAULT
     
    if [[ $1 =~ --PARAMETRE1=.* ]]
    then
      param1=${1#--PARAMETRE1=}; shift
      #echo "$param1"
    fi
     
    case "$param1" in
      (XXXX) echo "je vais faire du XX";;
      (YYYY) echo "je vais faire du YY";;
      (DEFAULT) echo "je vais faire du defaut";;
      (*) echo "je vais faire une action non prevue '$param1'";;
    esac


    on ne voit pas bien l'utilisation que tu fais de getopt(s)
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Avatar de dexter74
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 120
    Billets dans le blog
    3
    Par défaut re
    Bonjour à tous,

    Je vous remercie de vos bon conseils, je vais pouvoir réalisé mon script et si j'arrive à faire ce que je veux, je le poste pour contribution.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    on ne voit pas bien l'utilisation que tu fais de getopt(s)
    Je vois que je n'ai pas été suffisamment clair.

    Je voulais dire que, étant donné que le getopt de ma machine ne gère pas les options longues, je peux choisir de ne pas l'utiliser du tout et traiter les options complètement manuellement (quitte à réinventer la roue!).

    Je mentionnais juste, au passage, que, sous macos 10.13, les outils shell ne sont pas de toute dernière fraicheur (bien que getopt soit de 2020):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ echo $BASH_VERSION
    3.2.57(1)-release
    $ man getopt | tail -1
    BSD                              April 3, 1999                             BSD
    $ ls -l $(which getopt)
    -rwxr-xr-x  1 root  wheel  17984 11 sep  2020 /usr/bin/getopt*
    Euh... Sinon, ça m'intéresserait de comprendre/apprendre comment mon script pourrait être amélioré (vu le pouce rouge).

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    étant donné que le getopt de ma machine ne gère pas les options longues, je peux choisir de ne pas l'utiliser du tout et traiter les options complètement manuellement (quitte à réinventer la roue!).
    ah, oui, c'est beaucoup plus clair dit comme ça !

    la pouce rouge, c'est pour les raisons données.

    quand je n'ai pas la possibilité d'utiliser des options longues, je n'en utilise pas.
    si je ne connais pas les options d'un programme, il n'y a pas de raisons que des options longues soient plus intuitives.
    et un programme bien documenté gagnera en rapidité de frappe avec des options courtes.

    et si vraiment tu veux des options longues, il y a des "routines" sur le net, à base de getopts, qui entre dans un "sous-case" quand l'option est -.
    c'est-à-dire, que quand le programme lira --optionLongue=blabla, getopts considérera le second tiret comme l'option,
    le premier case entrera donc dans le cas de l'option -. là, on coupe sur =, puis on passe au sous-case qui donnera blabla comme argument de optionLongue.
    en gros.

    je te laisse stfw.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [PowerShell] Lancement script PowerShell avec paramètres depuis .BAT
    Par sokai dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 24/01/2017, 13h59
  2. Lancement script avec même id
    Par Friksstyle dans le forum jQuery
    Réponses: 5
    Dernier message: 30/10/2012, 11h24
  3. Appel d'un script avec passage de paramètres
    Par Thoustra dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/12/2011, 14h19
  4. Lancement d'un script avec les droits root
    Par sellfe dans le forum Solaris
    Réponses: 2
    Dernier message: 30/10/2009, 17h19
  5. Appel de script avec paramètres
    Par anaon dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/05/2008, 08h38

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