GNU/Linux >> Tutoriales Linux >  >> Linux

Comando de lectura Bash

Bash viene con varios comandos integrados que puede usar en la línea de comandos o en sus scripts de shell.

En este artículo, exploraremos el read integrado comando.

Bash read # incorporado

read es un comando incorporado de bash que lee una línea de la entrada estándar (o del descriptor de archivo) y divide la línea en palabras. La primera palabra se asigna al primer nombre, la segunda al segundo nombre y así sucesivamente.

La sintaxis general de read incorporado toma la siguiente forma:

read [options] [name...]

Para ilustrar cómo funciona el comando, abra su terminal, escriba read var1 var2 , y presione "Entrar". El comando esperará a que el usuario ingrese la entrada. Escribe dos palabras y presiona "Enter".

read var1 var2Hello, World!

Las palabras se asignan a los nombres que se pasan al read comando como argumentos. Usar echo o printf para verificarlo:

echo $var1echo $var2
Hello, World!

En lugar de escribir en la terminal, puede pasar la entrada estándar a read utilizando otros métodos como canalización, here-string o heredoc:

echo "Hello, World!" | (read var1 var2; echo -e "$var1 \n$var2")
read y echo están entre paréntesis y se ejecutan en la misma subcapa.
Hello, World!

Aquí hay un ejemplo usando una cadena here y printf :

read -r var1 var2 <<< "Hello, World!"printf "var1: %s \nvar2: %s\n" "$var1" "$var2"
Var1: Hello, 
Var2: World! 

Cuando no se proporciona ningún argumento a read comando, toda la línea se asigna a REPLY variables:

echo "Hello, world!" | (read; echo "$REPLY")
Hello, World!

Si el número de argumentos suministrados a read es mayor que el número de palabras leídas de la entrada, las palabras restantes se asignan al apellido:

echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
Var1: Linux 
Var2: is awesome.

De lo contrario, si el número de argumentos es menor que el número de nombres, se asigna un valor vacío a los nombres restantes:

echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3")
Var1: Hello, 
Var2: World! 
Var3: 

Por defecto, read interpreta la barra invertida como un carácter de escape, lo que a veces puede provocar un comportamiento inesperado. Para deshabilitar el escape de barra invertida, invoque el comando con -r opción.

A continuación se muestra un ejemplo que muestra cómo read funciona cuando se invoca con y sin -r opción:

read <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, World!
read -r <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, \tWorld!

En general, siempre debe usar read con el -r opción.

Cambiando el Delimitador #

El comportamiento predeterminado de read es dividir la línea en palabras usando uno o más espacios, tabulaciones y nueva línea como delimitadores. Para usar otro carácter como delimitador, asígnelo al IFS variable (separador de campo interno).

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Cuando IFS se establece en un carácter que no sea espacio o tabulación, las palabras están separadas por exactamente un carácter:

echo "Linux::is:awesome." | \  (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3 \nVar4: $var4")

La línea se separa en cuatro palabras. La segunda palabra es un valor vacío que representa el segmento entre los delimitadores. Se crea porque usamos dos caracteres delimitadores uno al lado del otro (:: ).

Var1: Linux 
Var2:  
Var3: is 
Var4: awesome.

Puede usar más de un delimitador para dividir la línea. Al especificar múltiples delimitadores, asigne los caracteres al IFS variable sin espacio entre ellas.

Aquí hay un ejemplo usando _ un - como delimitadores:

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Cadena de solicitud n.°

Al escribir scripts de bash interactivos, puede usar el read comando para obtener la entrada del usuario.

Para especificar una cadena de solicitud, use -p opción. El indicador se imprime antes de read se ejecuta y no incluye una nueva línea.

He aquí un ejemplo sencillo:

read -r -p "Are you sure?"

En general, usaría el read comando dentro de un while bucle para obligar al usuario a dar una de las respuestas esperadas.

El siguiente código solicitará al usuario que reinicie el sistema:

while true; do
    read -r -p "Do you wish to reboot the system? (Y/N): " answer
    case $answer in
        [Yy]* ) reboot; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer Y or N.";;
    esac
done

Si el script de shell pide a los usuarios que ingresen información confidencial, como una contraseña, use -s opción que le dice a read no imprimir la entrada en el terminal:

read -r -s -p "Enter your password: "

Asigne las palabras a la matriz #

Para asignar las palabras a una matriz en lugar de nombres de variables, invoque el read comando con -a opción:

read -r -a MY_ARR <<< "Linux is awesome."

for i in "${MY_ARR[@]}"; do 
  echo "$i"
done
Linux 
is 
awesome.

Cuando se dan tanto una matriz como un nombre de variable, todas las palabras se asignan a la matriz.

Conclusión #

El read El comando se usa para dividir una línea de entrada en palabras.


Linux
  1. ¿El comando "eval" en Bash?

  2. Bash Script - Ejemplo de Hola mundo

  3. iniciando apachectl desde bash

  4. bash sh - comando no encontrado

  5. Bash - Comando de fecha y espacio

Comando de fuente Bash

Comando de historial en Linux (Bash History)

Comando de salida de Bash y códigos de salida

Comando Bash printf

Script Bash (II)

Script Bash (III)