Cómo utilizar el comando read en Linux

Cómo utilizar el comando read en Linux
Imagen de la función de comando de lectura

A veces, mientras interactúa con su sistema Linux, puede necesitar solicitar a los usuarios que ingresen datos o leer datos de archivos, o incluso desear establecer tiempos de espera. Puede realizar estas tareas y muchas otras con el readcomando y sus diversas opciones.

Este artículo le enseñará los conceptos básicos del readcomando y sus opciones utilizando numerosos ejemplos de código.

¿Qué es el comando de lectura?

En Linux, puedes usar el readcomando para capturar la entrada del usuario o leer una línea de la entrada estándar (stdin). Este comando lee la cantidad total de bytes del descriptor de archivo dado y los almacena en el búfer. Luego, devuelve la cantidad de bytes leídos, cero o un error.

Por ejemplo, si el número o el recuento es cero, se refiere al final del archivo. Pero si la operación es correcta, devuelve el número de bytes leídos. Si el comando de lectura encuentra algún error, devuelve -1.

Antes de explorar las opciones del comando de lectura, veamos primero la sintaxis del comando de lectura:

Aquí, el optionsparámetro especifica varios indicadores que se utilizan para modificar el comportamiento del comando de lectura. Además, el nameparámetro especifica el nombre de varias variables que se utilizan para almacenar la entrada. Si no se proporcionan nombres, la entrada se conserva en la $REPLYvariable bash.

Opciones de comando de lectura

El comando de lectura de Bash tiene muchas opciones para controlar la entrada del usuario. Algunas opciones no necesitan parámetros adicionales, mientras que otras sí.

Exploremos algunas opciones que podemos usar con el comando de lectura:

Opciones Descripciones
-a <matriz> Almacena la entrada como una matriz en lugar de variables separadas.
-s Se ejecuta silenciosamente, lo que significa que la entrada no se muestra en la terminal.
-Es Habilita la compatibilidad con la biblioteca Readline, lo que permite leer la línea de entrada.
-i <prefijo> Proporciona un valor de entrada inicial que aparece en el mensaje cuando se utiliza readline
-p <aviso> Muestra el mensaje especificado antes de leer la entrada.
-u <descriptor de archivo> Lee desde un descriptor de archivo especificado en lugar de la entrada estándar (stdin)
-d <delimitador> le permite especificar un delimitador de línea de entrada en lugar del carácter de nueva línea predeterminado
-t <tiempo> Establece un período de tiempo de espera para la entrada; si la entrada no se recibe dentro de este tiempo, read devuelve un error
-r Cuando se configuran, las barras invertidas no se tratan como caracteres de escape.
-n <número> lee solo el número especificado de caracteres

Escriba el siguiente comando para mostrar el menú de ayuda del comando de lectura:

Cómo leer una entrada mediante el comando Read

La forma más sencilla de utilizar el comando read es sin argumentos ni opciones. Cuando ejecuta el comando read solo, le solicitará que proporcione la entrada que desea leer. Después de proporcionar la entrada, saldrá y la almacenará en su variable predeterminada denominada REPLY.

Tomemos esto como ejemplo:

Usando el comando de lectura para capturar la entrada del usuario

Ahora, después de proporcionar la entrada, mostrémosla usando el comando echo:

Usando el comando echo para mostrar la salida de la variable REPLY

Al leer el valor de entrada, también puede almacenarlo en cualquier otra variable específica. Por ejemplo, para almacenar el resultado en una variable, escriba el readcomando seguido del nombre de la variable:

Leer el valor ingresado por el usuario y almacenarlo en una variable específica

Ahora, para mostrar el resultado, debes usar el echocomando con la variable que almacena su valor:

Visualización del valor variable capturado mediante el comando echo

Lectura de valores múltiples

No existe una forma directa de leer varios valores mediante el readcomando. Sin embargo, puede dividir la oración de entrada única en varias palabras y almacenarlas en diferentes variables.

Consideremos el siguiente ejemplo:

Leer múltiples valores y almacenarlos en múltiples variables

Aquí, almacena la primera palabra de la oración en la primera variable, la segunda palabra en la segunda variable y todas las palabras restantes en la última variable proporcionada.

Devolvamos la salida usando el siguiente comando:

Mostrar múltiples valores usando el comando echo

Lectura de un archivo

Si bien read se utiliza principalmente para la entrada del usuario, también se puede utilizar para leer líneas de un archivo. Para ello, simplemente se utiliza loop while, echocommand y readcommand seguido de un nombre de variable específico:

Leer desde un archivo usando el comando read

Aquí, el whilebucle lee cada línea del archivo “samplefile.txt” y la registra en la variable line. Después de leer todas las líneas de un archivo, el echocomando muestra el valor de la línea.

Lectura de entrada en un bucle

También puede capturar la entrada del usuario en una secuencia repetida mediante una lectura con un bucle while. Esto resulta útil cuando desea recopilar varias entradas o continuar hasta que se cumpla una condición específica.

Por ejemplo, leamos múltiples entradas y también mostrémoslas en la terminal:

Lectura del valor de entrada del usuario en un bucle continuo

Además, el bucle continúa hasta que recibe una señal de fin de archivo (EOF), generalmente presionando Ctrl+ D.

Cómo solicitar una entrada mediante el comando Read

También puede crear mensajes interactivos que se mostrarán antes de que el usuario introduzca una entrada. Puede lograr esto utilizando la -popción junto con el comando de lectura.

Vamos a mostrar un mensaje personalizado y también capturar la entrada:

Creando un mensaje antes de leer la entrada del usuario

Limitar la entrada del usuario durante la lectura

¿Quieres controlar lo que los usuarios pueden ingresar? Usa la -nopción con lectura para especificar la longitud de caracteres deseada. Por ejemplo, si quieres capturar los primeros 4 caracteres de la entrada del usuario, usa el siguiente comando:

Lectura de entrada basada en el valor del carácter especificado

Después de ejecutar el comando anterior, solo podrá ingresar nueve caracteres. Limitar la entrada del usuario durante la lectura eliminará la necesidad de un delimitador y tampoco dividirá la entrada en palabras.

Separación de campos de salida mediante IFS

Puede utilizar la variable Separador de campos internos (IFS) con el comando read para determinar cómo dividir la entrada en campos separados. De forma predeterminada, IFS utiliza caracteres de espacio en blanco (tabulador, nueva línea y espacio) como separadores de campos. Sin embargo, puede personalizar IFS para adaptarlo a sus necesidades.

Por ejemplo, puede especificar el valor de dos puntos (:) como delimitador:

Lectura y división de valores en función del valor delimitador dado

Con la variable IFS, puede capturar múltiples entradas de línea del usuario y separarlas según el valor del separador.

Establecer tiempo de espera para lectura

También puedes configurar un tiempo de espera para el comando de lectura mediante la -topción. Esto resulta útil si quieres asegurarte de que el script no dependa de la entrada del usuario durante un tiempo prolongado.

Establezcamos un tiempo de espera de 10 segundos usando la -topción:

Lectura del valor de entrada dentro del tiempo dado

Si el usuario no escribe nada en 10 segundos, el script continúa su ejecución.

Cómo ocultar la entrada del usuario

En ocasiones, es posible que desees ocultar la entrada del usuario, como cuando ingresa información confidencial como contraseñas. Puedes lograrlo usando la -sopción del comando read:

Usando la opción -s con el comando de lectura para ocultar información

Después de almacenar la contraseña en la variable especificada, puedes mostrarla en la terminal usando el echocomando:

Mostrar la contraseña capturada usando la opción -e y el comando echo

Aquí, la -ebandera permite la interpretación de secuencias de escape, y \nla secuencia de escape agrega una nueva línea antes de la salida.

Terminando

Cuando termine de leer este artículo y de trabajar con los ejemplos, estará familiarizado con el uso del comando read en la terminal de Linux. Sin embargo, hay varios comandos más para explorar. Continúe leyendo para conocer los comandos básicos para principiantes.

Crédito de la imagen: Gabriel Heinzer vía Unsplash . Todas las capturas de pantalla son de Haroon Javed.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *