= 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 soportadas * ''h:'': comprueba la opción **-h con parámetros**. Da error en opciones no soportadas * ''abc'': 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 llevan * ''a|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 * [[https://stackoverflow.com/questions/16483119/an-example-of-how-to-use-getopts-in-bash]] #!/bin/bash usage() { echo "Usage: $0 [-s <45|90>] [-p ]" 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