Press "Enter" to skip to content

Scripting Bash. Entrada de Datos en la Consola con el Comando READ.


Funcionamiento Básico del Comando READ.

El comando «READ», al ser ejecutado, detiene la ejecución del script, a la espera de que el usuario presione la tecla Intro para continuar. Durante esta pausa, la consola permite al usuario escribir cualquier texto, para asi poderlo recoger y almacenar en variables o arrays despues de esta pausa, para su posterior manipulación.

La sintaxis típica del comando READ podría ser similar a una de estas:

read variable1
read variable1 variable2
read variable1 variable2 variable3

Donde en cada variable se guardarán las palabras o conjuntos de palabras que introduzca el usuario durante la ejecución del script.

En el caso de que el número de palabras o conjuntos de letras introducidos sea mayor que la cantidad de variables o posiciones del array indicadas en el comando READ, todas las palabras que sobren se guardarán en la última variable o posición del array indicado en el comando READ.

¿Cómo divide Bash un texto en palabras?

Bash utiliza un CARÁCTER DELIMITADOR DE PALABRAS (por defecto, un espacio en blanco) para dividir los textos en palabras o en conjuntos de letras.

Si queremos, en nuestros scripts, podemos personalizar temporalmente este CARÁCTER DELIMITADOR DE PALABRAS modificando una variable de entorno del sistema llamada IFS.

Para ello, deberemos modificar la variable de entorno IFS asignándole el nuevo carácter como si fuera un texto, colocándolo entre dos comillas dobles. Por ejemplo, para cambiar el CARÁCTER DELIMITADOR DE PALABRAS por un carácter punto y coma (;) , se puede hacer de esta forma:

IFS=";"

Pero hay que tener cuidado con esto, ya que al cambiar este nuevo CARÁCTER DELIMITADOR DE PALABRAS, se seguirá utilizando este nuevo carácter en todos los comandos READ, hasta que finalice la ejecución del script.

Guardar textos de un Comando READ en un Array

Este comando READ también permite guardar las palabras o conjuntos de letras introducidas por el usuario en un array.

Y para ello, la forma más sencilla es utilizar en el comando READ, la opción «-a» minúscula, junto con el nombre del array donde queramos guardar las diferentes palabras, por ejemplo:

read -a miArray

De forma que para acceder a una palabra tan solo se debe escribir el nombre del array junto con el índice de la posición que ocupa en el array, por ejemplo:

echo ${miArray[0]}

siendo 0 el índice de la primera posición del array, y por lo tanto, la posición donde está guardada la primera palabra introducida

Además de este método, también se pueden introducir las palabras o conjuntos de letras indicando manualmente las posiciones del array donde se quieran guardar.

Por ejemplo, si tenemos este array con tres posiciones:

miArray=("","","")

y queremos que las palabras se guarden solo en las dos últimas posiciones, se puede hacer de esta forma:

read miArray[1] miArray[2]

Guardar texto sin dividirlo por palabras.

Para guardar el texto introducido por el usuario después de ejecutar el comando READ sin dividirlo por palabras o conjunto de letras, se puede hacer colocando una unica variable o una unica posición de un array en el comando READ, de esta forma,

read variable1
read miArray[1]

Con esto se consigue que si el usuario introduce dos o más palabras y, dado que el número de palabras es superior a la cantidad de variables o posiciones del array, todo el texto se guardará en la misma variable o posición del array.

Otra forma de recuperar todo el texto que introduce un usuario a través de la consola sin dividirlo por palabras consiste en utilizar la variable de entorno REPLY.

Bash utiliza esta variable de entorno para guardar provisionalmente el texto que haya introducido el usuario mediante la consola de sistema. De esta manera, se puede recuperar el texto introducido durante la ejecución de un comando READ sin dividirlo por palabras, utilizando esta variable de entorno.

Por ejemplo, si se ejecuta un comando READ en un script sin colocar una variable o array,

read

debajo de este comando, se le puede indicar que muestre el contenido de la variable de entorno REPLY con un comando «echo» .

echo REPLY

Opciones del Comando READ

Aparte de la opción «-a» en minúscula, que permite al comando READ trabajar con arrays, este comando también ofrece una serie de opciones interesantes.

Por ejemplo, con la opción «-d» minúscula, se puede indicar un CARÁCTER DELIMITADOR DE FINAL DE LÍNEA. La función de este CARÁCTER DELIMITADOR DE LÍNEA es indicarle a la consola hasta qué carácter debe leer el texto que introduce un usuario en un comando READ. Si en un comando READ no indicamos un CARÁCTER DELIMITADOR DE FINAL DE LÍNEA, la consola leerá todo el texto escrito por el usuario hasta que se presione la tecla Intro.

Por ejemplo, si se ejecuta esta instrucción colocando entre comillas dobles el carácter punto y coma como CARÁCTER DELIMITADOR DE FINAL DE LÍNEA

read -d ";" variable1 variable2

Cada vez que el usuario escriba un carácter punto y coma, la consola interpretará que ha llegado al final de la línea de texto en lugar de hacerlo mediante la tecla Intro.

Se debe tener cuidado con esto, ya que el CARÁCTER DELIMITADOR DE FINAL DE LÍNEA y el CARÁCTER DELIMITADOR DE PALABRAS son independientes entre sí; es decir, si se cambia el CARÁCTER DELIMITADOR DE FINAL DE LÍNEA, no se cambiará el CARÁCTER DELIMITADOR DE PALABRAS.

Otra opción del comando READ es la opción «-e» minúscula. Con ella, se estará indicando que se desea activar todas las teclas del prompt y así evitar problemas de compatibilidad con el teclado. Por ejemplo, si se coloca esta opción en un comando READ, se podrán utilizar las flechas del teclado en la consola sin que se generen problemas.

La opción «-n» en minúscula del comando READ permite indicar a la consola la cantidad máxima de caracteres que debe leer del texto que introduzca el usuario.

Por ejemplo, si en un comando READ se coloca la opción «-n» en minúscula con un límite de caracteres de 8,

read -n 8 variable1

en el momento en que se escriba el octavo carácter, la consola automáticamente dejará de leer el texto que estaba introduciendo.

Otra opción interesante que se puede encontrar en el comando READ es la opción «-p« en minúscula, que permite mostrar un determinado texto antes de que el usuario pueda introducir su propio texto.

Por ejemplo, si durante la ejecución de un comando READ, se desea mostrar el texto «Dime tu nombre» antes de que el usuario pueda introducir cualquier texto, se puede hacer de esta manera:

read -p "Dime tu nombre:" variable1

Con la opción «-t» en minúscula del comando READ, se puede indicar la cantidad de segundos que debe esperar la consola para que el usuario introduzca el texto correspondiente antes de continuar ejecutando el script.

Por ejemplo, si se desea que la consola espere 5 segundos a que el usuario introduzca un texto durante la ejecución de un comando READ, se puede hacer de esta manera:

read -t 5 variable1

Video Introducir Textos con el Comando READ en Scripting Bash

Si queréis, podeis ver una explicación mas detalla en este video: