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"