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.