Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Se utiliza para pasar opciones en línea de órdenes a un shell script. Por ejemplo, la orden “ls”
admite, entre otras, las opciones “-l” y “-a”. En el caso del script para nuestra PDU deberá
aceptar las opciones “–a” (para apagar o encender todas las salidas) o “–f inicial”, “–t final”,
por ejemplo.
Sintaxis
getopts opciones variable
Variables de entorno
• OPTARG: contiene el valor del argumento para una opción determinada. Por ejemplo,
en el script final de la práctica 1, al indicar la opción “–f inicial”, el valor “inicial” se
almacenaría en OPTARG.
• OPTIND: contiene el índice de la siguiente opción de la línea de órdenes.
Habitualmente getopts se procesa en un bucle para analizar todas las opciones de entrada.
El análisis suele realizarse mediante la estructura case. Veamos un ejemplo donde el script
acepta dos parámetros de entrada: “-a” sin argumentos y “-f inicial” con el argumento inicial.
A continuación de la palabra getopts hemos indicado las opciones que acepta el script: “af”.
Cada una de las opciones que lleven argumento, en el ejemplo la única es “f”, deben ir seguidas
del carácter “:”. Como variable para procesar las opciones se ha elegido “opt”, será el nombre
que decida el programador.
Si introducimos opciones erróneas para las que el script no tiene una entrada definida, en
nuestro ejemplo podría ser la opción “–k”, o que no lleven los argumentos requeridos, el
sistema nos dará un mensaje de error.
Ejemplos de uso:
1. #./ejemp.sh –k
./ejemp.sh –k: illegal option – k
2. ./ejemp.sh –f
./ejemp.sh option requires an argument -- f
Si queremos que nuestro script genere mensajes de error personalizados debemos añadir al
bloque case nuevas entradas. Tenemos dos posibilidades:
• Utilizar dos mensajes de error, uno para cada uno de los casos mencionados. Para ello
debemos añadir “:” al comienzo de la lista de opciones indicada a getopts (se ha
marcado en rojo en el ejemplo):
while getopts “:af:” opt
En este caso:
• Si una opción es desconocida getops devuelve “?”.
• Si una opción espera un argumento y no lo introducimos getops devuelve
“:”.
Esto nos permitirá devolver distintos mensajes de error añadiendo en el case:
\?) echo “ ERROR - Opción desconocida: $OPTARG; exit 1;;
:) echo “ ERROR - La opción $OPTARG requiere un argumento
exit 1;;
Ejemplo de uso:
#./ejemp.sh –k
ERROR - Opción desconocida: -k
#./ejemp.sh –f
ERROR - La opción -f requiere un argumento
Además como puede verse al añadir “:” se elimina el mensaje de error del sistema y al introducir
una opción incorrecta queda almacenada en la variable OPTARG con lo que nuestro mensaje de
error puede referenciarla fácilmente.