Capturar y validar argumentos(flags) con getopts en bash

Siempre que al momento de desarrollar un bash script me veo en la necesidad de capturar argumentos(flags) getopts es mi opción

El siguiente es un ejemplo de captura y validación de argumentos o flags usando getopts

#!/bin/sh

##Leer y procesar argumentos
while getopts ":a:p:d: vh" opt
do
    case $opt in
        v ) echo "Mostrar version" ;;
        h ) echo "Mostrar ayuda" ;;
        a ) echo "Opcion -a ha sido capturada"
          VARIABLE_A=$OPTARG ;;
        p ) echo "Opcion -p ha sido capturada"
          VARIABLE_P=$OPTARG ;;
        d ) echo "Opcion -d ha sido capturada"
          VARIABLE_D=$OPTARG ;;
        \? ) echo "Opcion invalida -$OPTARG"
          exit 1 ;;
        : ) echo "Opcion -$OPTARG requiere un argumento"
          exit 1 ;;
    esac
done
shift $((OPTIND-1))

##Mostrar ayuda si un caracter no deseado es introducido##
if [ -n "$1" ]; then
    echo "Mostrar ayuda"
fi

Explicación

  • Las opciones seguidas de dos puntos ( : ) requieren de un argumento. Ejemplo: tu_script -p abc123
  • Cuando una opción requiere de un argumento getopts guarda el argumento en la variable OPTARG. VARIABLE_A=$OPTARG guarda el valor seguido de la opción -a en la variable VARIABLE_A para uso y manipulación posterior.
  • Si una opción no esperada es introducida getopts devuelve “?”
  • Si una opción espera un argumento y el argumento no es introducido getopts devuelve “:"
  • shift $((OPTIND-1)) re inicia el valor de OPTIND, la ultima función if valida si algún carácter que no sea opción o argumento es introducido y muestra la ayuda.

Deja tus comentarios y/o sugerencias