GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar la cola de látigo para crear guiones interactivos más fáciles de usar

Pocos administradores de sistemas en el mundo de Linux necesitan estar convencidos del poder y la importancia de los scripts. Los scripts están en todas partes y sabe que son esenciales para la administración del sistema Linux. Muchos scripts se ejecutan de forma silenciosa, incluso si los inicia manualmente un usuario o un administrador.

Sin embargo, algunos scripts transmiten información a los usuarios o les solicitan información. Puede usar funciones de secuencias de comandos como echo o read para lograr estos objetivos. Desafortunadamente, ninguna de estas herramientas muestra la información de una manera elegante o que llame la atención del usuario.

Whiptail agrega un cuadro de diálogo más interactivo a sus scripts. Estos cuadros brindan información, solicitan información o fuerzan un reconocimiento. El contenido que se muestra tiene un formato de interfaz de usuario basada en texto (TUI) y se navega con la pestaña. llave. Las selecciones se eligen con el Espacio clave.

En este artículo, lo guío a través de la instalación de whiptail (¡es fácil!) y luego demuestre algunos ejemplos básicos.

[ A los lectores también les gustó: ¿Qué lenguajes de programación son útiles para los administradores de sistemas? ]

Instalar cola de látigo

La instalación es fácil. Estoy usando Fedora 33 para estos ejemplos. Whiptail se incluye como parte de la biblioteca newt más grande, que agrega funcionalidad a las ventanas TUI.

Instalar whiptail usando el siguiente comando:

[damon@localhost ~]$ sudo dnf install newt

Eso es todo para la instalación.

En este artículo, creará archivos vim individuales con el código específico de whiptail. Recuerde realizar las siguientes tareas para cada archivo demostrado:

  • Nómbrelo claramente
  • Hágalo ejecutable escribiendo chmod 744 demo.sh
  • Ejecutarlo usando ./ antes del nombre del archivo si la ubicación no está en la RUTA

Nota :Asumo vim porque lo prefiero. Nano o cualquier otro editor de texto es suficiente.

A continuación, es hora de involucrar algunos scripts.

Mostrar un cuadro de diálogo básico

En realidad, no necesita un script para mostrar un cuadro de diálogo básico de whiptail . En este ejemplo, declarará y luego llamará a una variable. La variable es simplemente un mensaje de algún tipo que será reconocido con un OK botón. No se ofrecen opciones y no se utiliza la navegación.

En el símbolo del sistema, escriba la siguiente información:

[damon@localhost ~]$ message="Today, we will learn about Whiptail."
[damon@localhost ~]$ whiptail --msgbox --title "Intro to Whiptail" "$message" 25 80

Una vez que se muestra la interfaz, observe que el título que especificó aparece en la barra superior. Su mensaje también está presente. El OK el botón está disponible. En el whiptail comando, ingresaste dos

valores:25 y 80 . Esos valores son medidas de columna y se pueden ajustar. Definen el tamaño de la ventana de la interfaz. Tenga cuidado de seleccionar un tamaño que no ocupe toda la pantalla y evite que el usuario vea el mensaje completo o seleccione Aceptar. . La mayoría de las ventanas de Terminal se establecerán en 80 columnas o más.

Una vez que haya observado todos los componentes de la interfaz, seleccione OK presionando el Enter clave.

En este ejemplo, utilizó dos opciones:--msgbox y --title

Y ahora un ejemplo más interesante.

Generar una consulta

Se pueden escribir guiones que acepten la entrada de un usuario. Si está escribiendo un script que interactuará con usuarios no técnicos, puede ser beneficioso crear una interfaz más fácil de usar. En este ejemplo, al usuario se le harán dos preguntas:Nombre y país.

Cree un archivo llamado query.sh con el siguiente contenido.

#Part 1 - Query for the user's name
NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                        
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Greetings," $NAME
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

#Part 2 - Query for the user's country

COUNTRY=$(whiptail --inputbox "What country do you live in?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                       
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "I hope the weather is nice in" $COUNTRY
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

Observe que en este ejemplo, usó --inputbox en lugar de --msgbox . Has organizado el whiptail código como una declaración si/entonces.

El 8 y 39 los valores definen el tamaño del cuadro de diálogo. Si está siguiendo su propio entorno de laboratorio, reemplace 39 con 10 , guarde sus cambios y vuelva a ejecutar whiptail código. Verá que el cuadro de diálogo es demasiado pequeño para ser útil. Usa la pestaña tecla para seleccionar Cancelar y, a continuación, vuelva a establecer el valor de tamaño en 39 de 10 .

No olvide establecer los permisos para hacer que el archivo sea ejecutable y use ./ para ejecutarlo desde la ubicación actual.

[damon@localhost ~]$ chmod 777 query.sh 
[damon@localhost ~]$ ./query.sh 

Aquí hay un vistazo a los resultados después de completar el cuadro de diálogo:

Ha proporcionado información a los usuarios a través de un cuadro de mensaje y ha recopilado información del usuario a través de un cuadro de entrada. A continuación, hazle al usuario algunas preguntas adicionales.

Cree un cuadro de diálogo sí/no

Hay muchas variaciones para hacer preguntas al usuario. En este caso, usará una simple consulta sí/no para descubrir si hoy es martes. Puede hacer esto creando un archivo de prueba llamado tuesday.sh y colocando el siguiente contenido en él:

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78); then
    echo "Happy Tuesday, exit status was $?."
else
    echo "Maybe it will be Tuesday tomorrow, exit status was $?."

fi

En lugar de --inputbox o --msgbox de los ejemplos anteriores, usaste el --yesno opción. Al igual que el ejemplo anterior, este está organizado como una consulta si/entonces.

Aquí está la salida resultante:

El --yesno La opción box también nos permite editar el contenido de los campos "Sí" y "No". Aquí hay un ejemplo:

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78 --no-button "Not Tuesday" --yes-button "Tuesday"); then
echo "Happy Tuesday, exit status was $?."
else
echo "Maybe it will be Tuesday tomorrow, exit status was $?."
fi

La única modificación al ejemplo es la adición de los dos --no-button y --yes-button opciones, con su correspondiente texto (en este caso, "Martes No" y "Martes").

Así es como se ve el cuadro de diálogo resultante:

Una última cosa. Whiptail envía la entrada del usuario a stderr. Sí, leyó correctamente:stderr y

no stdout, que es donde recoge la entrada del usuario para consumirla en el script. La forma de solucionar este problema es invertir la redirección para que la entrada del usuario vaya a la salida estándar.

Aquí está la frase para hacer eso:

3>&1 1>&2 2>&3

Explicación:

  • Cree un descriptor de archivo 3 que apunte a 1 (stdout)
  • Redirigir 1 (stdout) a 2 (stderr)
  • Redirigir 2 (stderr) al descriptor de archivo 3, que apunta a stdout

Así es como se ve en un fragmento de script del --inputbox anterior ejemplo:

NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)

[ Hoja de referencia gratuita:glosario de Kubernetes ] 

Resumir

He mostrado varios ejemplos básicos, pero whiptail puede hacer mucho más. He proporcionado suficiente aquí para que pueda comenzar y hay muchos tutoriales útiles en línea. Sus scripts necesitarán una forma de consumir la entrada que los usuarios han ingresado. Le recomiendo que revise sus secuencias de comandos interactivas para determinar si sería útil agregar cuadros de diálogo TUI.

Aquí hay una lista de las opciones de cuadro principal disponibles para whiptail :

  • --título
  • --cuadro de información
  • --cuadro de mensaje
  • --sí no
  • --cuadro de entrada
  • --caja de contraseñas
  • --menú
  • --cuadro de texto
  • --lista de control
  • --lista de radio
  • --calibre

Linux
  1. Cómo crear y usar subdominios

  2. Cómo crear un alias y usar el comando Alias ​​en Linux

  3. Cómo usar rsyslog para crear un servidor de agregación de registros de Linux

  4. ¿Cómo utiliza Systemd los scripts /etc/init.d?

  5. ¿Qué son los scripts de Shell? ¿Cómo crear scripts de Shell?

Cómo crear scripts de shell

Cómo crear cuadros de diálogo GUI en Bash Scripts con Whiptail en Linux

Cómo crear documentos con scripts Bash

Cómo usar el comando echo en Bash Scripts en Linux

Cómo crear y usar un archivo de intercambio en Linux

¿Cómo usar if-else en Shell Scripts?