Diferentes formas de leer un archivo en un script Bash usando While Loop

Diferentes formas de leer un archivo en un script Bash usando While Loop

Este artículo trata sobre cómo leer archivos en scripts bash usando un bucle while. Leer un archivo es una operación común en programación. Debe estar familiarizado con los diferentes métodos y qué método es más eficaz de utilizar. En bash, una sola tarea se puede lograr de muchas maneras, pero siempre hay una manera óptima de realizar la tarea y debemos seguirla.

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

while [CONDITION] realiza el bloque de código

Analicemos la sintaxis while.

  • while loop. debe comenzar con una palabra clave while seguida de una condición.
  • Una condición. debe incluirse dentro de []. o [[]]. La condición siempre debe ser verdadera para que se ejecute el bucle.
  • El bloque de código real se colocará entre do. y hecho.

NUMBER = 0 mientras que [[$ NUMBER-le 10]] repiten “Bienvenido $ NUMBER veces” ((NUMBER ++)) hecho While Loop  While Loop While Loop

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

Junto con while. usaremos el comando read. para leer el contenido de un archivo línea por línea. A continuación se muestra la sintaxis de cómo se combinan los comandos while. y read. Ahora hay diferentes formas de pasar el archivo como entrada y las veremos todas.

# SYNTAX while read VARIABLE do code done

Tubería en Linux

freestar.config.enabled_slots.push (LocationName : “tecmint_incontent”, slotId: “tecmint_incontent”);

Normalmente usaremos el comando cat para ver el contenido del archivo desde la terminal. Además, canalizaremos la salida del comando cat. a otros comandos como grep, sort, etc.

De manera similar, usaremos el comando cat. aquí para leer el contenido del archivo y canalizarlo a un bucle while. Para la demostración, estoy usando el archivo /etc/passwd. pero no es aconsejable jugar con este archivo, así que tome una copia de seguridad de este archivo y juegue con él si lo desea.

cat/etc/passwd | mientras lee LREAD, echo $ LREAD hecho  Tubería en Linux  Tuberías en Linux Piping en Linux

Analicemos lo que sucederá cuando el se envía el código anterior.

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

También puede usar otros comandos como head, tail y pipe al bucle while.

encabezado-n 5/etc/passwd | mientras lee LREAD, echo $ LREAD hecho ancho  Head Command Head Command

Redirección de entrada en Linux

Podemos redirigir el contenido del archivo a while loop. usando el operador de redirección de entrada (<).

while read LREAD do echo $ LREAD done  Redirección de entrada 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 se lee LREAD, echo $ LREAD done <$ FILENAME  Almacenar nombre de archivo en variable  Almacenar nombre de archivo en variable Almacenar nombre de archivo en variable

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

Mientras lee LREAD do echo $ LREAD done <$ 1 | head-n 5  Almacenar nombre de archivo como argumento  Almacenar nombre de archivo como argumento Almacenar nombre de archivo como argumento

Separador de campo interno

Usted puede funcionar con diferentes tipos de formatos de archivo ( CSV. TXT. JSON. y es posible que desee dividir el contenido del archivo en función de un delimitador personalizado. En este caso, puede utilizar el “ Separador de campo interno (IFS). para dividir el contenido del archivo y almacenarlo en variables.

Déjeme demostrar cómo funciona. Eche un vistazo al archivo /etc/passwd. que tiene dos puntos (:) como delimitador. Ahora puede dividir cada palabra de una línea y almacenarla en una variable separada.

En el siguiente ejemplo, estoy dividiendo el archivo /etc/passwd. con dos puntos como separador y almacenar cada división en diferentes variables.

while IFS = “:” leer ABCDEFG do echo $ A echo $ B echo $ C echo $ D echo $ E echo $ F echo $ G hecho  Separador de campo interno 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 recorre. el 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 iniciales, espacios en blanco finales, caracteres de tabulación en la línea 2 y algunos caracteres de escape ( \ n. y \ t. .

 Archivo con líneas vacías Archivo con líneas vacías Archivo con líneas vacías mientras se lee LREAD do echo $ LREAD done  Línea en blanco no ignorada Línea en blanco no ignorada

Vea el resultado, la línea en blanco no se ignora. Además, una cosa interesante a tener en cuenta es cómo se recortan los espacios en blanco con el comando leer. Una forma sencilla de ignorar las líneas en blanco al leer el contenido del archivo es utilizar el operador de prueba con el indicador-z, que comprueba si la longitud de la cadena es cero. Ahora repitamos el mismo ejemplo, pero esta vez con un operador de prueba.

mientras lee LREAD, haga si [[!-z $ LREAD]] luego echo $ LREAD fi done  Líneas en blanco ignoradas Líneas en blanco ignoradas

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

Caracteres de escape

Los caracteres de escape como \ n, \ t, \ c no se imprimirán 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  Archivo con caracteres de escape Archivo con caracteres de escape mientras se lee LREAD do echo $ LREAD done Carácter de escape en Linux Carácter de escape en Linux

Puede ver en la salida que los caracteres de escape han perdido su significado y solo n. y t. se imprimen en lugar de \ n y \ t. Puede utilizar-r para evitar la interpretación de barra invertida.