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.
