HOWTO · Bash

Usar getopts en Bash Script

Esto muestra el uso de getopts en scripts bash analizando opciones con argumentos y analizando opciones sin argumentos.

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.