Cómo utilizar el comando read en Linux
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 read
comando y sus diversas opciones.
Este artículo le enseñará los conceptos básicos del read
comando y sus opciones utilizando numerosos ejemplos de código.
¿Qué es el comando de lectura?
En Linux, puedes usar el read
comando 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 options
parámetro especifica varios indicadores que se utilizan para modificar el comportamiento del comando de lectura. Además, el name
pará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 $REPLY
variable 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:
Ahora, después de proporcionar la entrada, mostrémosla usando el comando echo:
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 read
comando seguido del nombre de la variable:
Ahora, para mostrar el resultado, debes usar el echo
comando con la variable que almacena su valor:
Lectura de valores múltiples
No existe una forma directa de leer varios valores mediante el read
comando. Sin embargo, puede dividir la oración de entrada única en varias palabras y almacenarlas en diferentes variables.
Consideremos el siguiente ejemplo:
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:
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
, echo
command y read
command seguido de un nombre de variable específico:
Aquí, el while
bucle 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 echo
comando 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:
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 -p
opción junto con el comando de lectura.
Vamos a mostrar un mensaje personalizado y también capturar la entrada:
Limitar la entrada del usuario durante la lectura
¿Quieres controlar lo que los usuarios pueden ingresar? Usa la -n
opció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:
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:
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 -t
opció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 -t
opción:
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 -s
opción del comando read:
Después de almacenar la contraseña en la variable especificada, puedes mostrarla en la terminal usando el echo
comando:
Aquí, la -e
bandera permite la interpretación de secuencias de escape, y \n
la 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