Diferentes formas de leer el archivo en el script bash usando while loop

Diferentes formas de leer el archivo en el script bash usando while loop

Este artículo trata sobre cómo leer archivos en scripts bash utilizando un Mientras que el bucle. Leer un archivo es una operación común en programación. Debe estar familiarizado con diferentes métodos y qué método es más eficiente de usar. En Bash, se puede lograr una sola tarea de muchas maneras, pero siempre hay una forma óptima de hacer la tarea y debemos seguirla.

Antes de ver cómo leer el contenido del archivo usando Mientras que el bucle, una imprimación rápida sobre cómo funciona While Loop. Mientras que el bucle evalúa una condición e itera sobre un conjunto dado de códigos cuando la condición es verdadera.

Mientras [condición] haz el bloque de código hecho 

Desglosemos Mientras que el bucle sintaxis.

  • Mientras que el bucle debe comenzar con una palabra clave seguida de una condición.
  • A condición debe estar encerrado dentro [] o [[]]. La condición siempre debe devolver verdadera para que se ejecute el bucle.
  • El bloque real de código se colocará entre hacer y hecho.
Número = 0 while [$ number -le 10]] do echo "bienvenido $ número tiempos" ((número ++)) hecho 
Mientras que el bucle

Este es un ejemplo muy simple, donde el bucle ejecuta hasta NÚMERO no es mayor que 10 e imprime la declaración de eco.

Junto con mientras Usaremos el leer Comando para leer el contenido de un archivo Line by Line. A continuación se muestra la sintaxis de cómo mientras y leer Los comandos se combinan. Ahora hay diferentes formas de pasar el archivo como entrada y los veremos a todos.

# Sintaxis mientras lee variable hacer código hecho 

Tuberías en Linux

Normalmente usaremos el comando CAT para ver el contenido del archivo desde el terminal. Además, tuvieron la salida del comando de gato a otros comandos como Grep, Sort, etc.

Del mismo modo, usaremos el comando de gato aquí para leer el contenido del archivo y llevarlo a un mientras bucle. Para la demostración, estoy usando /etc/passwd Archivo, pero no es aconsejable jugar con este archivo, así que tome una copia de copia de seguridad de este archivo y repúdate con él si lo desea.

CAT /ETC /PASSWD | Mientras lea lread do echo $ lread hecho 
Tuberías en Linux

Desglosemos lo que sucederá cuando se envíe el código anterior.

  • Cat /etc /passwd leerá el contenido del archivo y lo pasará como entrada a través de la tubería.
  • leer El comando lee cada línea pasada como entrada del comando CAT y la almacena en el L Leer variable.
  • leer El comando leerá el contenido del archivo hasta Eol se interpreta.

También puede usar otros comandos como la cabeza, la cola y su bucle mientras bucle.

cabeza -n 5 /etc /passwd | Mientras lea lread do echo $ lread hecho 
Comando de cabeza

Redirección de entrada en Linux

Podemos redirigir el contenido del archivo a Mientras que el bucle Uso del operador de redirección de entrada (<).

Mientras lea lread do echo $ lread hecho < /etc/passwd | head -n 5 
Redirección de entrada

También puede almacenar el nombre del archivo en una variable y pasarlo a través de un operador de redirección.

Filename = "/etc/passwd" mientras lea lread do echo $ lread hecho < $FILENAME 
Almacenar el nombre de archivo en variable

También puede pasar los nombres de los archivos como argumento a su script.

Mientras lea lread do echo $ lread hecho < $1 | head -n 5 
Almacenar el nombre de archivo como argumento

Separador de campo interno

Puede trabajar con diferentes tipos de formatos de archivo (CSV, TXT, Json) y es posible que desee dividir el contenido del archivo basado en un delimitador personalizado. En este caso, puede usar "Separador de campo interno (IFS)"Para dividir el contenido del archivo y almacenarlo en variables.

Déjame demostrar cómo funciona. Echa un vistazo al /etc/passwd archivo que tiene un colon (:) Como el delimitador. Ahora puede dividir cada palabra desde una línea y almacenarla en una variable separada.

En el siguiente ejemplo, me estoy dividiendo /etc/passwd archivar con un colon como mi separador y almacenar cada división en diferentes variables.

mientras que ifs = ":" lea a b c d e f g do echo $ a echo $ b echo $ c echo $ d echo $ e echo $ f echo $ g hecho < /etc/passwd 
Separador de campo interno

Mostré solo una línea dividida en la captura de pantalla anterior considerando el tamaño de la captura de pantalla.

Líneas vacías en Linux

Las líneas vacías no se ignoran cuando bucle A través del contenido del archivo. Para demostrar esto, he creado un archivo de muestra con el contenido a continuación. Hay 4 líneas y pocas líneas vacías, espacios en blanco líder, espacio en blanco, caracteres de tabulación en la línea 2 y algunos personajes de escape (\norte y \ t).

Archivo con líneas vacías
Mientras lea lread do echo $ lread hecho < testfile 
Línea en blanco no ignorada

Ver el resultado, la línea en blanco no se ignora. Además, una cosa interesante a tener en cuenta es cómo los espacios blancos son recortados por el leer dominio. Una forma simple de ignorar las líneas en blanco al leer el contenido del archivo es usar el operador de prueba con el -z bandera que verifica si la longitud de la cadena es cero. Ahora repitamos el mismo ejemplo, pero esta vez con un operador de prueba.

Mientras lea lread do si [[[ ! -z $ lread]] luego echo $ lread fi hecho < testfile 
Líneas en blanco ignoradas

Ahora desde la salida, puede ver que se ignoran las líneas vacías.

Personajes de escape

Escapar personajes como \norte, \ t, \C no se imprimirá al leer un archivo. Para demostrar esto, estoy usando el mismo archivo de muestra que tiene pocos caracteres de escape.

Archivo con caracteres de escape
Mientras lea lread do echo $ lread hecho < testfile 
Escapar del personaje en Linux

Puedes ver en la salida Los caracteres de escape han perdido su significado y solo norte y T se imprimen en lugar de \norte y \ t. Puedes usar -riñonal Para prevenir la interpretación de inverso.

mientras lea -r lread do echo $ lread hecho < testfile 
Prevenir la interpretación de barra de invernadero

Eso es todo para este artículo. Nos encantaría saber de usted si hay comentarios o consejos. Sus comentarios es lo que nos ayuda a crear un mejor contenido. Sigue leyendo y sigue apoyando.