getopts
buen tutorial: https://wiki.bash-hackers.org/howto/getopts_tutorial
uso
- la cadena que acompaña a la instrucción getopts indica las opciones disponibles
getopts OPTSTRING VARNAME [ARGS…]
- OPTSTRING:
h
: comprueba la opción -h sin parámetros. Da error en opciones no soportadash:
: comprueba la opción -h con parámetros. Da error en opciones no soportadasabc
: comprueba las opciones -a, -b, -c. Da error en opciones no soportadas:abc
: comprueba las opciones -a, -b, -c. NO da error en opciones no soportadas- resumiendo:
:
al principio de la cadena de OPTSTRING silencia opciones no soportadas:
detrás de una opción hace que espere parámetro
- al procesar VARNAME (en un case):
\?
: es usado para las opciones no válidas:
: es usado para las opciones que requieren parámetros pero no los llevana|b|c
: procesa en la misma instrucción las 3 opciones (si así lo necesiamos)h|*
: el * se usa como comodín para opciones que no se han definido (sin sentido con el uso de ?)
/via: https://stackoverflow.com/questions/16483119/an-example-of-how-to-use-getopts-in-bash
ejemplos
- primer ejemplo
#!/bin/bash usage() { echo "Usage: $0 [-s <45|90>] [-p <string>]" 1>&2; exit 1; } while getopts ":s:p:" o; do case "${o}" 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}"
#!/bin/bash while getopts ":a:" opt; do case $opt in a) echo "-a was triggered, Parameter: $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done