Introducción
Este laboratorio te introduce a la lectura de entrada en scripts de shell de Linux. La lectura de entrada es una habilidad fundamental para crear scripts de shell interactivos que puedan responder a la entrada del usuario. Al aprender cómo usar el comando read, podrás recopilar y procesar los datos ingresados por los usuarios, lo que hará que tus scripts sean más versátiles y amigables con el usuario.
En este laboratorio, aprenderás cómo leer la entrada del usuario, procesar esa entrada dentro de tus scripts y crear scripts de shell interactivos que puedan responder dinámicamente a diferentes entradas de usuario. Estas habilidades son esenciales para escribir herramientas y scripts de línea de comandos eficaces en entornos Linux.
Lectura básica de entrada
El comando read es un comando incorporado del shell que lee una línea de entrada desde la entrada estándar (por lo general, el teclado) y la asigna a variables. Esto permite que los scripts reciban y procesen la entrada del usuario.
En este paso, crearás un script simple que lea la entrada del usuario y la muestre de nuevo al usuario.
Primero, asegúrate de estar en el directorio del proyecto:
cd /home/labex/projectCrea un nuevo archivo de script llamado
input_reader.sh:touch input_reader.shHaz que el script sea ejecutable:
chmod +x input_reader.shAbre el archivo de script utilizando el editor de texto nano:
nano input_reader.shAgrega el siguiente código al script:
#!/bin/bash ## Un script simple para demostrar la lectura básica de entrada echo "Por favor, ingrese su nombre:" read name echo "Hola, $name! Bienvenido a la lectura de entrada en Linux."Este script:
- Comienza con un shebang (
#!/bin/bash) que especifica que el script debe ejecutarse utilizando bash - Muestra un mensaje solicitando el nombre del usuario
- Utiliza el comando
readpara capturar lo que el usuario escribe y lo almacena en una variable llamadaname - Muestra un saludo que incluye el nombre ingresado por el usuario
- Comienza con un shebang (
Guarda el archivo presionando
Ctrl+O, luego presionaEnterpara confirmar el nombre del archivo y sal de nano presionandoCtrl+X.Ejecuta el script para probarlo:
./input_reader.shDeberías ver una salida similar a esta:
Por favor, ingrese su nombre: John Hola, John! Bienvenido a la lectura de entrada en Linux.La salida real mostrará cualquier nombre que hayas ingresado en lugar de "John".
El comando read espera la entrada del usuario y la almacena en una o más variables. En este ejemplo, la entrada se almacenó en una sola variable llamada name. Más adelante, aprenderás cómo capturar múltiples entradas con un solo comando read.
Uso de read con bucles
En este paso, mejorará su script para leer continuamente entradas utilizando un bucle hasta que se cumpla una condición de salida específica. Este patrón se utiliza comúnmente en scripts interactivos donde se necesita recopilar múltiples piezas de información del usuario.
Abra su script para editarlo:
nano input_reader.shReemplace el contenido existente con el siguiente código:
#!/bin/bash ## Script mejorado con un bucle para múltiples entradas echo "Ingrese múltiples entradas (escriba 'exit' para salir):" while true; do ## Solicitar entrada echo -n "> " read input ## Verificar si el usuario desea salir if [[ "$input" == "exit" ]]; then echo "Saliendo del lector de entrada." break fi ## Procesar la entrada echo "Usted ingresó: $input" done echo "¡Gracias por usar el lector de entrada!"Este script:
- Utiliza un bucle
while truepara crear un bucle infinito que seguirá aceptando entradas - Muestra un indicador (
>) antes de cada entrada utilizandoecho -n, lo que evita un salto de línea - Lee la entrada del usuario en la variable
input - Verifica si la entrada es "exit" y sale del bucle si lo es
- De lo contrario, muestra la entrada de vuelta al usuario
- Finalmente, muestra un mensaje de agradecimiento después de salir del bucle
- Utiliza un bucle
Guarde el archivo presionando
Ctrl+O, luego presioneEnterpara confirmar el nombre del archivo y salga de nano presionandoCtrl+X.Ejecute el script mejorado:
./input_reader.shDebería ver una salida similar a esta:
Enter multiple inputs (type 'exit' to quit): > hello You entered: hello > world You entered: world > exit Exiting the input reader. Thank you for using the input reader!
Esta estructura de bucle es especialmente útil cuando se necesita procesar múltiples entradas secuencialmente, como cuando se crea una interfaz de línea de comandos simple o una herramienta de entrada de datos. La declaración break se utiliza para salir del bucle cuando el usuario escribe "exit", pero se podría modificar la condición para salir según cualquier criterio necesario.
Lectura con mensajes de solicitud y valores predeterminados
En este paso, aprenderás cómo proporcionar valores predeterminados para la entrada y utilizar la opción -p para crear mensajes de solicitud más limpios. Esto es útil cuando quieres dar a los usuarios la opción de simplemente presionar Enter para aceptar un valor sugerido.
Abre tu script para editarlo:
nano input_reader.shReemplaza el contenido existente con el siguiente código:
#!/bin/bash ## Script que demuestra la lectura con valores predeterminados ## Usando la bandera -p para el mensaje de solicitud y proporcionando un valor predeterminado con el operador || read -p "Ingrese su país (predeterminado: USA): " country country=${country:-USA} echo "País establecido en: $country" ## Otro ejemplo con un valor predeterminado read -p "Ingrese su lenguaje de programación preferido (predeterminado: Bash): " language language=${language:-Bash} echo "Lenguaje de programación establecido en: $language" ## Combinando con un tiempo de espera usando la opción -t echo "Se necesita una respuesta rápida:" read -t 5 -p "¿Cuál es tu color favorito? (Tienes 5 segundos, predeterminado: Blue): " color color=${color:-Blue} echo "Color favorito establecido en: $color"Este script:
- Utiliza la bandera
-ppara mostrar un mensaje de solicitud dentro del mismo comandoread, lo que hace que el código sea más conciso - Aplica la sintaxis
${variable:-default}para establecer un valor predeterminado si la entrada del usuario está vacía - Demuestra la opción
-t, que establece un tiempo de espera para la entrada (5 segundos en este ejemplo)
- Utiliza la bandera
Guarda el archivo presionando
Ctrl+O, luego presionaEnterpara confirmar el nombre del archivo y sal de nano presionandoCtrl+X.Ejecuta el script para probarlo:
./input_reader.shPrueba estos escenarios:
- Ingresa un nombre de país cuando se te solicite y luego presiona Enter
- Simplemente presiona Enter (sin escribir nada) para aceptar el valor predeterminado
- Para el ejemplo de tiempo de espera, intenta esperar más de 5 segundos para ver qué sucede
Ejemplo de salida al aceptar los valores predeterminados:
Enter your country (default: USA): Country set to: USA Enter your preferred programming language (default: Bash): Programming language set to: Bash Quick response needed: What is your favorite color? (You have 5 seconds, default: Blue): Favorite color set to: Blue
La opción -p de read te permite proporcionar un mensaje de solicitud en el mismo comando, lo que hace que tus scripts sean más limpios y legibles. La sintaxis ${variable:-default} es una poderosa característica del shell que sustituye un valor predeterminado cuando la variable no está definida o está vacía, lo cual es perfecto para proporcionar opciones predeterminadas en scripts.
Lectura de entrada segura y múltiples variables
En este último paso, aprenderás dos técnicas más avanzadas:
Leer entrada segura (como contraseñas) sin mostrar los caracteres en pantalla
Leer múltiples variables con un solo comando
readAbre tu script para editarlo:
nano input_reader.shReemplaza el contenido existente con el siguiente código:
#!/bin/bash ## Script que demuestra la lectura de entrada segura y múltiples variables ## Lectura de entrada segura con la bandera -s (sin eco) echo "Ejemplo de entrada segura:" read -p "Nombre de usuario: " username read -s -p "Contraseña: " password echo ## Agrega un salto de línea después de la entrada de la contraseña echo "Nombre de usuario ingresado: $username" echo "Longitud de la contraseña: ${#password} caracteres" ## Lectura de múltiples variables a la vez echo -e "\nEjemplo de múltiples variables:" read -p "Ingrese nombre, apellido y edad (separados por espacios): " first_name last_name age echo "Nombre: $first_name" echo "Apellido: $last_name" echo "Edad: $age" ## Lectura con un delimitador personalizado echo -e "\nEjemplo de delimitador personalizado:" read -p "Ingrese valores separados por comas: " -d "," value1 echo ## Agrega un salto de línea echo "Primer valor antes de la coma: $value1" echo -e "\n¡Gracias por completar este laboratorio sobre lectura de entrada en Linux!"Este script:
- Utiliza la bandera
-sconreadpara ocultar la entrada (útil para contraseñas u otra información sensible) - Muestra cómo leer múltiples variables de una sola línea de entrada proporcionando múltiples nombres de variables al comando
read - Demuestra la bandera
-dpara especificar un delimitador personalizado (en lugar del carácter de salto de línea predeterminado)
- Utiliza la bandera
Guarda el archivo presionando
Ctrl+O, luego presionaEnterpara confirmar el nombre del archivo y sal de nano presionandoCtrl+X.Ejecuta el script para probarlo:
./input_reader.shEjemplo de salida (tus entradas serán diferentes):
Secure Input Example: Username: john_doe Password: Username entered: john_doe Password length: 8 characters Multiple Variable Example: Enter first name, last name, and age (separated by spaces): John Doe 30 First name: John Last name: Doe Age: 30 Custom Delimiter Example: Enter comma-separated values: test, First value before comma: test Thank you for completing this lab on Linux input reading!
La seguridad es importante cuando se maneja información sensible como contraseñas. La bandera -s asegura que los caracteres escritos no se muestren en pantalla. Observa que en el ejemplo de la contraseña, el script solo muestra la longitud de la contraseña para verificación, no la contraseña real.
Leer múltiples variables a la vez puede hacer que tus scripts sean más eficientes y amigables para el usuario. Cuando se le dan múltiples nombres de variables al comando read, divide la entrada en función de la variable de entorno IFS (Internal Field Separator), que por defecto es el espacio en blanco (espacios, tabulaciones y saltos de línea).
La bandera -d te permite cambiar el delimitador que indica el final de la entrada. Por defecto, read se detiene en un salto de línea (cuando presionas Enter), pero puedes cambiarlo a cualquier carácter, como una coma en el ejemplo.
Resumen
En este laboratorio, has aprendido técnicas clave para leer y procesar la entrada del usuario en scripts de bash de Linux:
Lectura básica de entrada: Utilizar el comando
readpara capturar la entrada del usuario en variables.Entrada basada en bucles: Implementar bucles para leer continuamente la entrada hasta que se cumpla una condición específica.
Valores predeterminados y mensajes de solicitud: Establecer valores predeterminados para la entrada y crear scripts más limpios con mensajes de solicitud en línea.
Técnicas avanzadas: Leer entrada segura sin mostrarla en pantalla, capturar múltiples variables en un solo comando y utilizar delimitadores personalizados.
Estas habilidades de lectura de entrada son fundamentales para crear scripts de shell interactivos que puedan adaptarse a la entrada del usuario, proporcionar valores predeterminados adecuados y manejar varios tipos de datos. Ahora puedes aplicar estas técnicas para crear herramientas y scripts de línea de comandos más receptivos y amigables con el usuario.
A medida que continúes desarrollando tus habilidades en Linux, considera combinar estos métodos de lectura de entrada con otras características de bash, como declaraciones condicionales, funciones y operaciones de archivos, para crear herramientas más complejas y potentes para la automatización y la gestión del sistema.



