Usar getopts en Bash Script

Fumbani Banda 30 enero 2023
  1. Opciones de análisis con argumentos en Bash getopts
  2. Opciones de análisis sin argumentos en Bash getopts
Usar getopts en Bash Script

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.
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub

Artículo relacionado - Bash Script