optstring - Bash Getopts con opciones mĂșltiples y obligatorias
getopts bash ejemplos (1)
¿Es posible usar getopts para procesar múltiples opciones juntas? Por ejemplo, myscript -iR o myscript -irv.
Además, tengo una situación en la que, según un script de condición, necesitaría una opción obligatoria. Por ejemplo, si el argumento del script es un directorio, necesitaré especificar la opción -R o -r junto con cualquier otra opción (myscript -iR mydir o myscript -ir mydir o myscript -i -r mydir o myscript -i -R mydir), en caso de solo archivo -i es suficiente (myscript -i myfile).
Intenté buscar pero no obtuve ninguna respuesta.
Puede concatenar las opciones que proporcione y getopts
separará. En su declaración de case
, manejará cada opción individualmente.
Puede establecer una marca cuando se vean las opciones y verificar que las "opciones" (!) getopts
estén presentes después de que se haya completado el bucle getopts
.
Aquí hay un ejemplo:
#!/bin/bash
rflag=false
small_r=false
big_r=false
usage () { echo "How to use"; }
options='':ij:rRvh''
while getopts $options option
do
case $option in
i ) i_func;;
j ) j_arg=$OPTARG;;
r ) rflag=true; small_r=true;;
R ) rflag=true; big_r=true;;
v ) v_func; other_func;;
h ) usage; exit;;
/? ) echo "Unknown option: -$OPTARG" >&2; exit 1;;
: ) echo "Missing option argument for -$OPTARG" >&2; exit 1;;
* ) echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
esac
done
shift $(($OPTIND - 1))
if ! $rflag && [[ -d $1 ]]
then
echo "-r or -R must be included when a directory is specified" >&2
exit 1
fi
Esto representa una implementación de referencia completa de una función getopts
, pero es solo un boceto de un script más grande.