jueves, 16 de marzo de 2017

read - Lee valores de la entrada estándar

El comando integrado read se usa para leer una única línea de la entrada estándar. Este comando puede usarse para leer la entrada del teclado o, cuando se emplea redirección, una línea de datos desde un archivo. El comando tiene la siguiente sintaxis:

read [-opciones] [variable...]

donde opciones es una o más opciones disponibles listadas a continuación y variable es el nombre de una o más variables para almacenar el valor de entrada. Si no se proporciona ningún nombre de variable, la variable de shell REPLY contiene la línea de datos.

Básicamente, read asigna campos desde la entrada estándar hacia las variables especificadas. Si modificamos nuestro script de evaluación de un entero para usar read, aparecería así:

#!/bin/bash

# read-integer: evaluate the value of an integer.

echo -n "Please enter an integer -> "
read int

if [[ "$int" =~ ^-?[0-9]+$ ]]; then
     if [ $int -eq 0 ]; then
          echo "$int is zero."
     else
          if [ $int -lt 0 ]; then
               echo "$int is negative."
          else
               echo "$int is positive."
          fi
          if [ $((int % 2)) -eq 0 ]; then
               echo "$int is even."
          else
               echo "$int is odd."
          fi
     fi
else
     echo "Input value is not an integer." >&2
     exit 1
fi

Usamos echo con la opción -n (que elimina la nueva línea final en la salida) para mostrar un prompt, y luego usamos read para introducir un valor para la variable int. Ejecutando este script obtenemos esto:

[me@linuxbox ~]$ read-integer
Please enter an integer -> 5
5 is positive.
5 is odd.

read puede asignar la entrada a múltiples variables, como se muestra en este script:

#!/bin/bash

# read-multiple: read multiple values from keyboard

echo -n "Enter one or more values > "
read var1 var2 var3 var4 var5

echo "var1 = '$var1'"
echo "var2 = '$var2'"
echo "var3 = '$var3'"
echo "var4 = '$var4'"
echo "var5 = '$var5'"

En este script, asignamos y mostramos hasta cinco valores. Fíjate cómo se comporta read cuando se le dan diferentes números de valores:

[me@linuxbox ~]$ read-multiple
Enter one or more values > a b c d e
var1 = 'a'
var2 = 'b'
var3 = 'c'
var4 = 'd'
var5 = 'e'
[me@linuxbox ~]$ read-multiple
Enter one or more values > a
var1 = 'a'
var2 = ''
var3 = ''
var4 = ''
var5 = ''
[me@linuxbox ~]$ read-multiple
Enter one or more values > a b c d e f g
var1 = 'a'
var2 = 'b'
var3 = 'c'
var4 = 'd'
var5 = 'e f g'

Si read recibe menos que el número esperado, las variables extra estarán vacías, mientras que una cantidad excesiva de entrada provoca que la última variable contenga toda la entrada extra.

Si no se listan variables tras el comando read, se le asignará a una variable de shell, REPLY, toda la entrada:

#!/bin/bash

# read-single: read multiple values into default variable

echo -n "Enter one or more values > "
read

echo "REPLY = '$REPLY'"

Ejecutar este script produce esto:

[me@linuxbox ~]$ read-single
Enter one or more values > a b c d
REPLY = 'a b c d'

No hay comentarios:

Publicar un comentario