Leer desde un archivo o entrada de usuario en Bash

Muhammad Husnain 30 enero 2023
  1. El guión de BASH
  2. Entrada de stdin en Bash Script
  3. Entrada de archivo bash
Leer desde un archivo o entrada de usuario en Bash

BASH es la abreviatura de Bourne Again Shell, un nombre inteligente que se refiere a Bourne Shell (es decir, creado por Steven Bourne). BASH es un programa shell desarrollado por Brian Fox como una versión actualizada de la aplicación sh de Bourne Shell.

Este artículo discutirá la función de entrada en los scripts de bash y los métodos para obtener información desde la consola de entrada estándar y algunos archivos específicos. Además, también revisaremos varios scripts de ejemplo para ilustrar la idea.

El guión de BASH

Un archivo de texto sin formato que contiene una lista de instrucciones que normalmente colocaríamos en la línea de comando se llama Bash Shell Script. Un Bash es particularmente útil cuando una secuencia de tareas se va a realizar de forma repetitiva.

En lugar de escribir la misma secuencia de instrucciones cada vez, solo se puede ejecutar un archivo de script Bash preescrito. Por lo tanto, esto ahorra mucho trabajo manual y también ahorra tiempo.

Una ventaja más del script Bash son sus características de programación imperativas. Esto significa que permite escribir procedimientos, declaraciones condicionales y estructuras de bucle como los lenguajes de programación (por ejemplo, C/C++, Javascript, etc.).

Bash Script es un archivo de texto con extensión .sh. Para crearlo, usamos el comando tocar con la extensión .sh.

touch myscript.sh

Podemos abrirlo en cualquier editor de texto, por ejemplo, gedit. Para abrirlo, use el siguiente comando.

Dominio:

gedit myscipt.sh

Usamos la línea #!/bin/bash para iniciar un script de shell. En esta línea #! parte se conoce como shebang, y la parte restante es la ruta al intérprete bash en el sistema operativo.

Después de eso, escribiremos nuestro conjunto de comandos requerido en el script y lo guardaremos. Para ejecutar un script Bash, usamos el comando bash.

Dominio:

bash myscript.sh

Esto ejecutará nuestro script y nos dará el resultado de los comandos utilizados en el script.

Entrada de stdin en Bash Script

También podemos tomar la entrada del usuario desde la terminal o stdin en nuestro script Bash. Podemos usar el comando incorporado de Bash read para leer la entrada del usuario de Bash.

Acepta la entrada del usuario y la asigna a una variable. Puede leer solo una línea del shell Bash.

Sintaxis:

read <variable>

Cada palabra separada por espacio se guarda en una variable diferente.

Ejemplo de secuencia de comandos bash:

#!/bin/bash
echo "Enter your name: "
read userName
echo "Enter your age: "
read userAge;
echo "Enter your 3 Subjects: "
read sub1 sub2 sub3
echo "The user $userName is $userAge years old and is specialized in $sub1, $sub2, and $sub3. "

En este ejemplo, hemos tomado la entrada del usuario de su nombre, edad y 3 temas. Los temas se guardan en variables separadas.

Producción:

lea solo una línea del shell Bash

No es obligatorio dar el nombre de la variable con el comando read. Si no especificamos el nombre de la variable, almacena el valor en la variable RESPONDER por defecto, para que podamos usarlo más adelante en nuestro script.

Ejemplo de secuencia de comandos bash:

#!/bin/bash
echo "Enter a number from 1-10: "
read
echo "You entered: $REPLY"

Producción:

almacena el valor en la variable REPLY por defecto

En los ejemplos anteriores, hemos usado 2 líneas para tomar entrada, una para la instrucción de solicitud y la otra para el comando de lectura. Este proceso también se puede realizar en una sola línea usando una bandera -p con el comando read.

Sintaxis:

read -p <Prompt statement> <variable_name>

Ejemplo de guión de Bach:

#!/bin/bash
read -p "Please enter the name of the file: " fileName
echo "The filename you entered is: $fileName"

Producción:

use una bandera -p con el comando read

Hay algunos casos en los que necesitamos ocultar la entrada del usuario de la pantalla por motivos de seguridad y privacidad. Por ejemplo, cuando necesitamos tomar una contraseña como entrada, esta no debe estar visible en la pantalla mientras el usuario la está ingresando.

Para lograrlo, usamos la bandera -s para silenciarlo.

Ejemplo de secuencia de comandos bash:

#!/bin/bash
read -p "Enter username: " userName
read -sp "Enter Password: " pass
echo
echo "Hello $userName"

Producción:

use la bandera -s para que la entrada de contraseña no sea visible en la pantalla

También podemos tomar entrada en una matriz usando el indicador -a. Con esta bandera, todas las palabras de una línea se almacenarán en los diferentes índices de la matriz a los que se puede acceder más adelante.

Ejemplo de secuencia de comandos bash:

#!/bin/bash
echo "Enter names of 2 students: "
read -a stuNames
echo "The names of students are:${stuNames[0]}, ${stuNames[1]} "

Producción:

tomar la entrada del usuario en una matriz usando el indicador -a

Entrada de archivo bash

El script Bash también puede recibir información de los archivos. El comando leer se usa para este propósito y lee el archivo línea por línea. Discutiremos algunos ejemplos para leer datos del archivo.

Podemos leer desde archivos usando la consola así como el script. Primero, miramos el comando de la consola y luego avanzamos hacia el script.

Supongamos que tenemos un archivo data.txt con un texto como este:

LG
Samsung
Bosch
Pel

El comando para leer este archivo:

while read ln; do echo $ln; done < data.txt

Producción:

leer archivos .txt en BASH

También podemos usar un script para leer el archivo.

Ejemplo de secuencia de comandos bash:

#!/bin/bash
fname='data.txt'
a=1
while read ln; do
echo "Reading line $a : $ln"
a=$((a+1))
done < $fname

Producción:

use un script para leer del archivo

También podemos leer el nombre del archivo desde la línea de comandos. Cree un archivo bash y coloque el siguiente script en él.

Este script tomará el nombre del archivo de la entrada de la línea de comando. La variable $1, que contendrá el nombre del archivo para lectura, lee el valor del primer argumento.

Si el archivo existe en la ubicación actual, el bucle while leerá el archivo línea por línea e imprimirá el contenido, como en el ejemplo anterior.

Ejemplo de secuencia de comandos bash:

#!/bin/bash
fname=$1
while read ln; do
echo $ln
done < $fname

Para ejecutar este script, usaremos el siguiente comando.

Dominio:

$ bash myscript.sh data.txt

Producción:

leer el nombre del archivo desde la línea de comando

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Artículo relacionado - Bash Input