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 :

Options et paramètres d'un scripts


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut Options et paramètres d'un scripts
    Je pars du principe, peut-être erroné, que chaque option lance une fonction du script.

    Pour un script, qui peut recevoir également plusieurs paramètres à traiter :
    - comment distinguer les options des paramètres d'un script ?
    - comment permettre à un utilisateur de saisir plusieurs options ?

    Je souhaiterais obtenir un comportement similaire aux commandes du shell, pour lesquelles on peut taper, par exemple :
    ls -ld mon_fichier autre_fichier
    ou
    ls -l -d mon_fichier autre_fichier
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour N-BaH,

    Voici la base de ce que tu cherches, si j'ai bien compris:
    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
    #!/bin/bash
     
    while getopts ":a:b" opt
    do
      case $opt in
      a)
        echo $OPTARG
      ;;
      b)
        echo b
      ;;
      *)
        echo "$(basename $0) [-a <arg>] [-b]"
        exit 1
      ;;
      esac
    done
    Attention, on ne peut coller les options (ls -Al) que si elle n'ont pas d'argument.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Oui, merci jmelyn, ça devrait être ça, cependant :
    Code bash : 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
     
       #!/bin/bash
    # scriptName: getoptsNparm.sh
     
    abc() { until [ -z $1 ]; do echo "abc : $1"; shift; done; }
    def() { until [ -z $1 ]; do printf "def : $1"; shift; done; }
     
    while getopts "a:d:" opt; do
    case $opt in
    a) echo "option -a : $OPTIND $OPTARG"; abc "$OPTARG";;
    d) echo "option -d $OPTARG"; def "$OPTARG";;
    *) echo -e "usage :\v $(basename $0) [-a|-d] parm1[ parm2 [...]]
    \t -a affiche un paramètre positionnel après l'autre
    \t -d affiche un paramètre positionnel après l'autre";;
    esac
    done
    shift $(($OPTIND - 1))
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       ./getoptsNparm.sh -ad parm1 parm2
    option -a : 2 d
    abc : d
       ./getoptsNparm.sh -a parm1 parm2 -d parm2
    option -a : 3 parm1
    abc : parm1
    option -d parm2
    def : parm2
       ./getoptsNparm.sh -a parm1 parm2 -d parm2
    option -a : 3 parm1
    abc : parm1
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    La syntaxe des options / paramètres d'un script shell est traditionnellement la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <commande> [[-option | -option argument] ...] [[paramètre] ...]
    Ce qui signifie qu'une option peut avoir soit aucun argument soit un argument et pas plus d'un.

    Dans l'usage de la commande getopts, la chaîne est formée de la manière suivante :

    • : au début pour identifier les lettres d'options non prises en charge(branche * du case...esac)
    • x une lettre d'option qui ne doit pas être suivie d'un argument
    • x: une lettre d'option qui doit être suivie d'un argument

    S'il y a plus d'arguments qu'attendu derrière une lettre d'option, celui-ci est reconnu comme le premier paramètre qui suit les options et leurs arguments.

    Tout cela est assez bien expliqué dans le man getopts ou le man sh à défaut
    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.

  5. #5
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Anéfé, lorsque j'ai plus d'un paramètre à passer à une commande qui n'en attend qu'un seul, j'utilise les guillements, généralement double-quotes, parfois single-quotes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh login@host "ls -l | grep toto" | awk '{...}'
    Bon, c'est un cas un peu différent ici, mais la résolution est identique: Avec les guillemets, je délimite les paramètres que je veux passer à la commande: le grep est exécuté sur la machine distante, mais le awk en local.

Discussions similaires

  1. [PHP-JS] Passage de paramètre d'un script vers PHP
    Par fred_crrm dans le forum Langage
    Réponses: 2
    Dernier message: 13/06/2007, 15h40
  2. Réponses: 14
    Dernier message: 22/05/2007, 00h32
  3. Réponses: 2
    Dernier message: 05/04/2007, 13h55
  4. Réponses: 3
    Dernier message: 10/05/2006, 18h40
  5. Passer un paramètre dans le script
    Par ipeteivince dans le forum Windows
    Réponses: 2
    Dernier message: 02/03/2006, 17h00

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