martes, 11 de abril de 2017

Leyendo archivos con bucles

while y until pueden procesar entrada estándar. Esto permite que los archivos sean procesados con bucles while y until. En el siguiente ejemplo, mostraremos el contenido del archivo distros.txt usado en los capítulos anteriores:

#!/bin/bash

# while-read: read lines from a file

while read distro version release; do
    printf "Distro: %s\tVersion: %s\tReleased: %s\n" \
        $distro \
        $version \
        $release
done < distros.txt

Para redireccionar un archivo al bucle, colocamos el operador de redirección tras la sentencia done. El bucle usará read para introducir los campos desde el archivo redirigido. El comando read saldrá cada vez que lea una línea, con un estado de salida cero hasta que se alcance el final del archivo. En este punto, saldrá con un estado de salida distinto de cero, terminando de esta forma el bucle. También es posible canalizar la entrada estándar dentro de un bucle:

#!/bin/bash

# while-read2: read lines from a file

sort -k 1,1 -k 2n distros.txt | while read distro version release; do

    printf "Distro: %s\tVersion: %s\tReleased: %s\n" \
        $distro \
        $version \
        $release
done

Aquí hemos tomado la salida del comando sort y hemos mostrado la secuencia de texto. Sin embargo es importante recordar que como una tubería ejecutará el bucle en un subshell, cualquier variable creada o asignada dentro del bucle se perderá cuando termine el bucle.

No hay comentarios:

Publicar un comentario