Getopt

De Linuxmemo.

Getopts est une commande qui permet de contrôler les opérateurs utilisés par une commande. Cette méthode prendra en paramètre une chaîne de caractères lui indiquant les lettres définissant les options, et pourra être parcourue dans une boucle afin de contrôler chaque argument.

Pour définir les option courtes:

  • getopt -o
Règle:
Chaque caractère seul représente une option du script
un : signifie que l'option est un argument requis 
un :: signifie que l'option est un argument optionnel 
Example: getopt -o f:gh::i: 
f has a required argument, g has no argument, h has an optional argument and i has a required argument.

Pour définir les option longues

  • getopt -l
Règle:
Les options sont séparé par des ",".
un : signifie que l'option est un argument requis 
un :: signifie que l'option est un argument optionnel 
Example: getopt -l foo,bar::,baz:,foobar
foo has no argument, bar has an optional argument, baz has a required argument and foobar has no argument.

[modifier] Exemple de code

while getopt ":s:p:" option; do
   case "${option}" in
       s)
           s=${OPTARG}
           ((s == 45 || s == 90)) || usage
           ;;
       p)
           p=${OPTARG}
           ;;
       *)
           usage
           ;;
   esac
done
shift $((OPTIND-1))
if [ -z "${s}" ] || [ -z "${p}" ]; then
    usage
fi
echo "s = ${s}"
echo "p = ${p}"


#!/user/bin/env bash
# “a” and “arga” have optional arguments with default values.
# “b” and “argb” have no arguments, acting as sort of a flag.
# “c” and “argc” have required arguments.
# set an initial value for the flag
ARG_B=0
# read the options
TEMP=`getopt -o a::bc: --long arga::,argb,argc: -n 'test.sh' -- "$@"`
eval set -- "$TEMP"
# extract options and their arguments into variables.
while true ; do
   case "$1" in
       -a|--arga)
           case "$2" in
               "") ARG_A='some default value' ; shift 2 ;;
               *) ARG_A=$2 ; shift 2 ;;
           esac ;;
       -b|--argb) ARG_B=1 ; shift ;;
       -c|--argc)
           case "$2" in
               "") shift 2 ;;
               *) ARG_C=$2 ; shift 2 ;;
           esac ;;
       --) shift ; break ;;
       *) echo "Internal error!" ; exit 1 ;;
   esac
done
# do something with the variables -- in this case the lamest possible one :-)
echo "ARG_A = $ARG_A"
echo "ARG_B = $ARG_B"
echo "ARG_C = $ARG_C"
Outils personnels