Lectura de entrada en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/read("Input Reading") linux/BasicSystemCommandsGroup -.-> linux/exit("Shell Exiting") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/echo -.-> lab-271367{{"Lectura de entrada en Linux"}} linux/read -.-> lab-271367{{"Lectura de entrada en Linux"}} linux/exit -.-> lab-271367{{"Lectura de entrada en Linux"}} linux/touch -.-> lab-271367{{"Lectura de entrada en Linux"}} linux/chmod -.-> lab-271367{{"Lectura de entrada en Linux"}} linux/cd -.-> lab-271367{{"Lectura de entrada en Linux"}} linux/nano -.-> lab-271367{{"Lectura de entrada en Linux"}} end

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.

  1. Primero, asegúrate de estar en el directorio del proyecto:

    cd /home/labex/project
  2. Crea un nuevo archivo de script llamado input_reader.sh:

    touch input_reader.sh
  3. Haz que el script sea ejecutable:

    chmod +x input_reader.sh
  4. Abre el archivo de script utilizando el editor de texto nano:

    nano input_reader.sh
  5. Agrega 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 read para capturar lo que el usuario escribe y lo almacena en una variable llamada name
    • Muestra un saludo que incluye el nombre ingresado por el usuario
  6. Guarda el archivo presionando Ctrl+O, luego presiona Enter para confirmar el nombre del archivo y sal de nano presionando Ctrl+X.

  7. Ejecuta el script para probarlo:

    ./input_reader.sh

    Deberí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.

Usar 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.

  1. Abra su script para editarlo:

    nano input_reader.sh
  2. Reemplace 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 true para crear un bucle infinito que seguirá aceptando entradas
    • Muestra un indicador (>) antes de cada entrada utilizando echo -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
  3. Guarde el archivo presionando Ctrl+O, luego presione Enter para confirmar el nombre del archivo y salga de nano presionando Ctrl+X.

  4. Ejecute el script mejorado:

    ./input_reader.sh

    Deberí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.

  1. Abre tu script para editarlo:

    nano input_reader.sh
  2. Reemplaza 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 -p para mostrar un mensaje de solicitud dentro del mismo comando read, 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)
  3. Guarda el archivo presionando Ctrl+O, luego presiona Enter para confirmar el nombre del archivo y sal de nano presionando Ctrl+X.

  4. Ejecuta el script para probarlo:

    ./input_reader.sh

    Prueba 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:

  1. Leer entrada segura (como contraseñas) sin mostrar los caracteres en pantalla

  2. Leer múltiples variables con un solo comando read

  3. Abre tu script para editarlo:

    nano input_reader.sh
  4. Reemplaza 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 -s con read para 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 -d para especificar un delimitador personalizado (en lugar del carácter de salto de línea predeterminado)
  5. Guarda el archivo presionando Ctrl+O, luego presiona Enter para confirmar el nombre del archivo y sal de nano presionando Ctrl+X.

  6. Ejecuta el script para probarlo:

    ./input_reader.sh

    Ejemplo 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:

  1. Lectura básica de entrada: Utilizar el comando read para capturar la entrada del usuario en variables.

  2. Entrada basada en bucles: Implementar bucles para leer continuamente la entrada hasta que se cumpla una condición específica.

  3. 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.

  4. 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.