Cómo usar getopts para analizar las opciones de script

Cómo usar getopts para analizar las opciones de script

Objetivo

Aprende a usar la fiesta getopts construido para analizar una opción de script

Sistema operativo y versiones de software

  • Sistema operativo: - Todas las distribuciones de Linux

Requisitos

  • No hay requisitos especiales, solo acceso a un shell bash

Dificultad

MEDIO

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz
    directamente como usuario raíz o mediante el uso de sudo dominio
  • ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Introducción

La modificación de un comportamiento de script bash a través de opciones de tiempo de ejecución, al igual que normalmente con los programas de línea de comandos, puede ser muy útil. La cáscara de Bash proporciona el getopts Comando Builtin, una forma estándar de lograr esto. Cómo usarlo es lo que aprenderemos en este tutorial.

Creando nuestro script de pruebas

Para el propósito de este tutorial, vamos a crear un script de prueba y, con mucha fantasía, lo vamos a llamar prueba.mierda. El propósito de este script será generar algo dependiendo de la opción que proporcionaremos (no será el script más útil del mundo, pero será suficiente para explicar cómo funcionan las cosas).

Abramos nuestro editor de texto y comencemos:

#!/bin/bash set -e set -u set -o pipefail 

Las opciones de shell proporcionadas al comienzo de los scripts no son obligatorios, pero es un buen hábito usarlas en cada script que escribamos. En breve, -mi, corto para errexitModifica el comportamiento del shell que saldrá cada vez que sale un comando con un estado no cero (con algunas excepciones). -u es otra opción muy importante: esto hace que el shell sea tratar variables indefinidas como errores.

Finalmente, el frase de tuberías Cambia la forma en que se evalúan los comandos dentro de una tubería. El estado de salida de una tubería será el del comando más derecho para salir con un estado no cero, o cero si todos los programas en la tubería se ejecutan correctamente. En otras palabras, la tubería se considerará exitosa si todos los comandos involucrados se ejecutan sin errores.



La construcción de getopts

Después de esta breve digresión, volvamos al punto principal de este tutorial y veamos cómo getopts obras:

#!/bin/bash set -e set -u set -o pipefail mientras getopts 'lha:' opción; Do Case "$ opción" en l) echo "LinuxConfig" ;; h) echo "H significa H" ;; a) avalue = "$ optarg" echo "El valor proporcionado es $ optarg" ;; ?) echo "Uso del script: $ (BaseName \ $ 0) [-l] [-h] [-A SomeValue]"> & 2 Salida 1 ;; ESAC Done Shift "$ (($ optind -1))" 

Analicemos lo que tenemos arriba. En primer lugar el getopts Los comandos deben usarse dentro de un mientras bucle para que todas las opciones se analicen. Luego inmediatamente después del getopts Palabra clave, definimos las posibles opciones que nuestro script aceptará. Ellos son l, H y finalmente a.

¿Qué significa el colon después de esta última opción?? Es la forma en que le decimos a Getopts que la opción requiere un argumento. Cada opción analizada se almacenará dentro del $ Opción variable, mientras que un argumento, cuando esté presente, se convertirá en el valor del$ Optarg uno.

Cada opción se administra dentro de una declaración de caso, con una final ? caso que coincidirá siempre que se proporcionará una opción que no existe. En ese caso, simplemente haremos eco del usuario el uso correcto del script y saldremos con un código de error.

Probar nuestro guión

Primero, vamos a llamar a nuestro script proporcionando una opción no existente, solo para probar el caso que mencionamos anteriormente. Damos permisos ejecutables del script y luego lo llamamos:

prueba de chmod +x.sh && ./TESH.SH -C 

Como se esperaba, recibiremos un mensaje que nos dice que la opción proporcionada es ilegal y luego instrucciones sobre cómo usar el script:

./prueba.SH: Opción ilegal - C Script Uso: Prueba.sh [-l] [-h] [-A SomeValue] 

Mientras que la uso de guiones la cadena es la que establecemos para imprimir en el error de uso, lo anterior, es un mensaje generado automáticamente por getopts y se puede deshabilitar prefijando las opciones con un :. Ahora veamos qué sucede cuando usamos el script de la forma en que estaba destinado a:



./prueba.sh -l linuxconfig 

Usamos el l opción, y el script impreso en pantalla de la cadena que establecemos en el caso correspondiente, esto también es lo que sucede si proporcionamos el -H opción:

./prueba.sh -h h significa h 

Intentemos llamar al script con el a opción. Como se dijo anteriormente, esta opción requiere un argumento, y fallará si este último no se proporciona:

./prueba.SH -A ./prueba.SH: La opción requiere un argumento: un uso de script: prueba.sh [-l] [-h] [-A SomeValue] 

Como se esperaba, el script respondió con un mensaje de error, recordándonos que la opción que proporcionamos requiere un argumento:

./prueba.sh -A esmoquin el valor proporcionado es tux 

Esta vez el script respondió sin error. Observe cómo el argumento que proporcionamos, golfista se imprime porque se convierte en el valor del $ Optarg variable.

Usando getopts, Puede proporcionar también más de una opción en ese momento a su script, combinando las banderas cuando lo inicia. Por ejemplo, veamos qué sucede cuando intentamos llamar a nuestros scripts con ambos l y H Opciones:

./prueba.SH -LH LinuxConfig H significa H 

Como podemos observar, ambas opciones se procesaron, en el orden lo proporcionamos. De maldición, las opciones se pueden dar por separado, y también podemos agregar el a opción, pero siempre recordando agregar el argumento requerido:

./prueba.sh -l -h -a Tux_rulez Linuxconfig H significa H El valor proporcionado es Tux_Rulez 

La variable $ optind

Si echamos otro vistazo al script muy trivial que hemos escrito anteriormente, vemos otra instrucción al final del bucle While: Shift $ (($ optind -1)). Cual es su propósito? Digamos que llamamos al guión de esta manera:

./prueba.sh -l -h -A Hello World 

Cuando se invoca el guión, el $ Optind La variable se establece en 1, y se incrementa cada vez que se analiza una opción, hasta que alcanza el último. Por lo tanto, en este caso, tendrá un valor de 5 cuando alcanzará el último elemento, que es Hola, el argumento obligatorio requerido por el -a opción.

cambio es un caparazón construido que mueve los parámetros posicionales del script por un número especificado de posiciones que se le proporcionan como un número positivo, descartando los argumentos relacionados.

La forma en que lanzamos el script anterior, el último argumento proporcionado, "mundo", no está analizado por getopts, que en ese momento ya terminó su trabajo.

Ahora, si hacemos un cambio del valor de $ Optind - 1 (Ese es el número efectivo de las opciones analizadas, 4 en este caso) En los parámetros posicionales, lo que queda son solo los argumentos que no son opciones, en este caso "mundo", a los que podemos acceder utilizando el uso de los ps variable más adelante en este script.

Tutoriales de Linux relacionados:

  • Bash Script: Uso de banderas con ejemplos de argumentos
  • Cosas para instalar en Ubuntu 20.04
  • Cómo realizar operaciones de administración con Ansible ..
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Comandos de Linux: los 20 comandos más importantes que necesitas ..
  • Comandos básicos de Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Descarga de Linux
  • Cómo imprimir el árbol de directorio usando Linux
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..