Usar getopts en Bash Script
- 
          
            Opciones de análisis con argumentos en Bash getopts
- 
          
            Opciones de análisis sin argumentos en Bash getopts
 
Este tutorial muestra el uso de getopts en scripts bash analizando opciones con argumentos y analizando opciones sin argumentos.
Opciones de análisis con argumentos en Bash getopts
    
Las letras n y c tienen : delante de ellas. Esto significa que esperamos que se proporcione un argumento siempre que se utilice la opción -n o -c. La variable opt, contiene el valor de la opción actual que ha sido analizada por getopts.
while getopts n:c: opt
do
    case "${opt}" in
          n) name=${OPTARG};;
          c) country=${OPTARG}
     esac
done
echo "I am $name";
echo  "And I live in $country";
Cuando ejecutamos el script, la opción -n proporciona John como argumento, mientras que la opción -c proporciona Britain como argumento.
bash flags.sh -n John  -c Britain
Producción :
I am John
And I live in Britain
Opciones de análisis sin argumentos en Bash getopts
    
Esto utilizará un script bash simple que imprime el script usage cuando se pasa la opción -h, e imprime el contenido de la carpeta cuando se utiliza la opción -p con una ruta especificada a la carpeta como argumento.
El primer : significa que getopts no informará ningún error. En cambio, manejaremos los errores nosotros mismos. La letra p tiene un : delante, mientras que la letra h no. Esto significa que siempre que se usa la opción -p, esperamos un argumento, pero la opción -h se puede usar sin un argumento.
Cuando se pasa la opción -h, invoca la función usage. La opción -p asigna el argumento pasado a la variable path, que luego se pasa a la función list como argumento. El * especifica la acción que se debe realizar siempre que se pase una opción que no sea -h o -p.
#!/bin/bash
function usage {
       printf "Usage:\n"
       printf " -h                               Display this help message.\n"
       printf " -p <folder path>                 List contents of specified folder.\n"
       exit 0
}
function list {
       ls -l $1
}
while getopts :p:h opt; do
    case ${opt} in
      h)
         usage
        ;;
      p) path=${OPTARG}
         list $path
         #echo $folder
       ;;
      *)
          printf "Invalid Option: $1.\n"
          usage
       ;;
     esac
done
Ejecute el script con la opción -h:
 ./getopts.sh -h
Usage:
 -h                               Display this help message.
 -p <folder path>                 List contents of specified folder.
Ejecute el script con la opción -p:
./getopts.sh -p /home/fumba/example
total 0
-rw-r--r-- 1 fumba fumba    0 Nov  1 21:43 file1.txt
-rw-r--r-- 1 fumba fumba    0 Nov  1 21:43 file2.txt
drwxr-xr-x 1 fumba fumba 4096 Nov  1 21:43 pictures
Ejecute el script con una opción no válida, -k:
./getopts.sh -k
Invalid Option: -k.
Usage:
 -h                               Display this help message.
 -p <folder path>                 List contents of specified folder.
