Cómo crear un menú de selección utilizando la instrucción Seleccionar en Bash Shell

Cómo crear un menú de selección utilizando la instrucción Seleccionar en Bash Shell

Todos a menudo usamos scripts bash para automatizar tareas aburridas y repetitivas. A veces en nuestros guiones necesitamos preguntar
El usuario realizará una o más opciones de manera interactiva: en este tutorial veremos cómo usar la declaración de selección de shell shell para realizar dicha operación en muy pocas líneas de código.

En este tutorial aprenderás:

  • Cómo usar la declaración de selección de bash
  • Cómo personalizar la solicitud de Seleccionar menú del menú
Cómo crear un menú de selección utilizando la instrucción Seleccionar en Bash Shell

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución
Software El caparazón de la fiesta
Otro ningún requerimiento especial
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un 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

La instrucción SELECT

La secuencia de comandos es una de las habilidades más comunes que un administrador del sistema debe poseer, para automatizar
tareas y hacerlos menos propensos al error. En casos no muy complejos, el shell es la herramienta perfecta para usar para el trabajo. Bash, el Bourne Again Shell, es la carcasa más utilizada en el mundo de GNU/Linux. Este caparazón proporciona lo muy útil seleccionar declaración. Su propósito se describe de la siguiente manera:

Seleccione palabras de una lista y ejecute comandos



La descripción se explica bastante por sí misma. La declaración nos permite recibir interactivamente una entrada de un usuario, generando una lista numerada de opciones y solicitándole que seleccione una. Veamos cómo se usa:

Seleccione el nombre [en palabras ...;] hacer comandos; hecho

La sintaxis es muy similar a la de un tradicional en bucle en Bash, excepto por el uso de seleccionar palabra clave. La declaración de selección, sin embargo, funciona de manera diferente. Veamos un ejemplo. Supongamos que queremos pedirle a un usuario que seleccione uno de los archivos contenidos en un directorio. Esto es lo que podríamos escribir:

$ files = "$ (ls -a .) "$ seleccione el nombre de archivo en $ archivos; hacer eco" $ archivo "; hecho 1) file1 2) file2 3) file3 #?

Expliquemos qué hemos hecho. En primer lugar, obtuvimos una lista de todos los archivos presentes en el directorio (en este caso, el directorio de trabajo actual) utilizando el LS comandar y especificar el -A opción (abreviatura de --casi todos), para excluir el implícito . y de la lista devuelta, que asignamos a la archivos variable.

Luego procedimos a usar el seleccionar declaración. Lo anterior es un ejemplo muy básico: proporcionamos el resultado de la expansión del archivo variable como la lista de opciones que se incluirán. Observe que evitamos citar la expansión $ archivos a propósito, para obtener división de palabras: Cuando se cita una expansión con cotizaciones dobles división de palabras se suprime, por lo que los espacios no se usan como delimitadores de palabras y el resultado de la expansión se considera como un todo. Esto no es lo que queremos en este caso: necesitamos que cada palabra se use como opción en el menú generado.



Las palabras obtenidas de la expansión de la variable se imprimen en el stderr (Error estándar). Cada uno está precedido y asociado con un número, que es lo que el usuario usará para hacer referencia a él. Después de que se muestren todos los elementos, se le solicita al usuario que ingrese su elección. Lo que se muestra es el PS3 solicitado, que, por defecto, se establece en #?.

¿Qué sucede cuando el usuario realiza una selección?? Vamos a ver:

$ files = "$ (ls -a .) "$ seleccione el nombre de archivo en $ archivos; hacer eco" que seleccionó $ nombre de archivo "; hecho 1) file1 2) file2 3) archivo3 #? 1 Usted seleccionó el archivo1 #?

La elección en la que ingresamos, 1, se lee del stdin (entrada estándar) y si el número ingresado se encuentra entre los disponibles, la palabra correspondiente ("archivo1" en el ejemplo) se asigna al,Nombre del archivo variable. En nuestro ejemplo especificamos echo "$ nombre de archivo" Como el comando se ejecutará una vez que se realiza la elección: como resultado: la palabra seleccionada se imprime en la pantalla. El número que ingresamos para especificar nuestra elección también se almacena en una variable: RESPONDER.

Puede notar que algo extraño sucedió en el ejemplo anterior: una vez que realizamos nuestra elección, después de la ejecución del comando, nos pidieron nuevamente una elección, por qué? Esto sucedió porque no proporcionamos un romper
dominio. Podemos arreglar fácilmente esto:

$ files = "$ (ls -a .) "$ seleccione el nombre de archivo en $ archivos; do echo" Seleccionó $ nombre de archivo "; ruptura; hecho 1) file1 2) file2 3) file3 #? 1 Usted seleccionó el archivo1

¿Qué pasa si no proporcionamos ninguna selección?? El aviso simplemente se repite hasta que lo hagamos:

Seleccione el nombre de archivo en $ archivos; do echo "usted seleccionó $ nombre de archivo"; romper; hecho 1) archivo1 2) file2 3) file3 #? 1) archivo1 2) file2 3) file3 #? 

¿Qué pasa si ingresamos un número que no está en la lista?? En este caso, la variable que usamos, el nombre de archivo en nuestro caso, se establece en nulo.

Cambiar el mensaje de selección

Como ya vimos, el aviso utilizado por el shell en el contexto de una declaración selecta es el PS3 solicitado, que por defecto, tiene el #? la cadena tiene un valor. Esto no es muy fácil de usar, por lo que es posible que deseemos cambiarlo y usar algo más descriptivo. Cómo podemos hacer eso? Muy simple: debemos cambiar el valor del PS3 parámetro:

$ Ps3 = "Por favor, ingrese su elección:"


La próxima vez que usemos el seleccionar Declaración, notaremos el cambio:

Seleccione el nombre de archivo en $ archivos; do echo "usted seleccionó $ nombre de archivo $ respuesta"; romper; hecho 1) archivo1 2) file2 3) archivo3 Ingrese su elección: 

El cambio realizado a la variable será efectivo solo para la sección de shell actual y, si nosotros exportar La variable, también en todos sus hijos:

$ exports ps3 = "Por favor ingrese su elección:"

El cambio, sin embargo, permanece temporal hasta que establecemos el PS3 variable dentro del .bashrc archivo. PS3 es solo una de las indicaciones utilizadas en Bash: consulte nuestro artículo de solicitud de bash si desea saber más sobre el tema.

Conclusiones

En este tutorial aprendimos a usar la fiesta seleccionar declaración. Vimos cómo funciona y cómo podemos usarlo para crear un menú de selección para pedirle a un usuario interactivamente que realice una opción. Finalmente vimos cómo personalizar el mensaje que se muestra en el menú de selección modificando el shell PS3 parámetro.

Tutoriales de Linux relacionados:

  • Mastering Bash Script Loops
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Bucles anidados en guiones Bash
  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Manejo de la entrada del usuario en scripts bash
  • Tutorial de depuración de GDB para principiantes
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
  • Cómo configurar un servidor OpenVPN en Ubuntu 20.04