2012-10-08 2 views
0

Possible en double:
Using getopts in bash shell script to get long and short command line optionstravailler avec des options dans le code bash

J'essaie de comprendre comment faire usage de drapeau comme -e/- envoyer par email -h/--help par exemple.

MISE À JOUR: Exemple actuel:

while getopts ":ec:h" OptionArgument; do 
case $OptionArgument in 

     e) S1=${OPTARG};; 
     c) S2=${OPTARG};; 
     h) usage;; 
     \?) usage;; 
     *) usage;; 
esac 
done 

Cependant, si je laisse en blanc, il ne fait rien. Si j'ajoute un -h, il fonctionne toujours et ne montrera pas l'utilisation.

Update2

while [ $1 ]; do 
     case $1 in 
       '-h' | '--help' | '?') 
         usage 
         exit 
         ;; 
       '--conf' | '-c') 

         ;; 
       '--email' | '-e') 
         EMAIL=$1 
         ;; 
       *) 
         usage 
         exit 
         ;; 
     esac 
     shift 
done 

-h/- travaux d'aide, mais tout le reste échoue et affiche l'utilisation.

+2

'la getopts' Bash ne supporte pas longtemps arguments, seulement une lettre. Voir [cette réponse] (http://stackoverflow.com/a/402410/26702) pour 'getopt' de GNU pour faire ce que vous voulez. – Telemachus

+0

Se penchera sur cela –

+0

Mis à jour la question et jusqu'à présent, il fonctionne à moitié –

Répondre

1

Si vous voulez longue GNU comme les options et les courts, voir ce script à la source dans votre script http://stchaz.free.fr/getopts_long.sh et un exemple:

Exemple:

#!/bin/bash 
# (long_option) 0 or no_argument, 
# 1 or required_argument, 2 or optional_argument). 

Help() { 
cat<<HELP 
Usage : 
    $0 [ --install-modules <liste des modules> ] [-h|--help] 
HELP 
    exit 0 
} 

. /PATH/TO/getopts_long.sh 

OPTLIND=1 
while getopts_long :h opt \ 
    install-modules 1 \ 
    help 0 "" "[email protected]" 
do 
    case "$opt" in 
     install-modules) 
      echo $OPTLARG 
     ;; 
     h|help) 
      Help; exit 0 
     ;; 
     :) 
      printf >&2 '%s: %s\n' "${0##*/}" "$OPTLERR" 
      Help 
      exit 1 
     ;; 
    esac 
done 
shift "$(($OPTLIND - 1))" 
Questions connexes