Leer datos recibidos por teclado en Shell Script

Si bien muchas veces usamos scripts en shell para automatizar totalmente la realización de tareas, muchas veces necesitamos autorizaciones u otros datos recibidos por teclado. Para leer esos datos tenemos el comando read

Como siempre que declaramos una variable, escribiremos su nombre sin $, pero a la hora de usar el valor de esa variable, sí que escribiremos $ seguido del nombre de la variable.

Para ver el uso de read sin modificadores, vamos a pedir al usuario que escriba su nombre con echo, recibimos el nombre con read y vamos a saludarle de nuevo con echo:

#!/bin/bash

echo "¿Cuál es su nombre?"
read name
echo "Hola, $name"

Podríamos realizar la pregunta en la misma instrucción usando el modificador -p:

#!/bin/bash

read -p "¿Cuál es su nombre? " name 
echo "Hola, $name"

En caso de que no indiquemos un nombre de variable, la variable por defecto que usa read de $REPLY:

#!/bin/bash

read -p "¿Cuál es su nombre? " 
echo "Hola, $REPLY"

Podemos indicar que sólo admita un determinado carácter, obviando todos los demás con -d (delimitador).

#!/bin/bash

for i in {1..5}
do
    echo $i
done
read -d "c" -p "Pulse c para continuar."
echo ""
for i in {6..10}
do
    echo $i
done

Para limitar el número de caracteres que lea read, lo indicaremos con -N seguido del número de caracteres a leer.

Limitemos el número de caracteres del script anterior a 1:

#!/bin/bash

for i in {1..5}
do
    echo $i
done
read -N 1 -p "Pulse c para continuar."
echo ""
if [ $REPLY == "c" ]
then
    for i in {6..10}
    do
        echo $i
    done
else
    echo "Fin de la secuencia."
fi

El comando read tiene también un modificador muy interesante que es -t, que permite indicarle el número de segundos a esperar antes de que continúe la ejecución del programa.

Si queremos mostrar por pantalla del 1 al 5, como en la secuencia anterior, y que si no indica el usuario nada en cinco segundos, continúe mostrando del 6 al 10, podemos hacerlo con:

#!/bin/bash 
for i in {1..5} 
do 
    echo $i 
done 
read -p "Pulse una tecla para continuar o espere 5 segundos." -N 1 -t 5
echo "" 
for i in {6..10} 
do 
    echo $i 
done

Aunque read tiene más opciones, que podemos ver con:

read --help

con estas opciones que hemos aprendido en este artículo, podemos darle mayor interacción a nuestros scripts.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.