Mes: enero 2011

Maneras de hacer un bucle “for” en Bash

Tres maneras distintas de realizar un bucle “FOR” en Bash.

   1:  #!/bin/bash

   2:  

   3:  for i in $(cat /etc/passwd)

   4:  do

   5:      echo $i

   6:  done

Al estilo C

   1:  #!/bin/bash

   2:  

   3:  for ((i=0;i<=48;i++))

   4:  do

   5:      echo $i

   6:  done

Igual que el primero pero otra manera de ejecutar el comando.

   1:  #!/bin/bash

   2:  

   3:  for i in `seq 48`

   4:  do

   5:      echo $i

   6:  done

Si al procesar un fichero de texto con un bucle FOR i no consigues ir línea por línea puedes mirar este otro post.

Anuncios

Leer un fichero línea por línea en Bash.

Para leer un fichero línea por línea en Bash se tiende a utilizar el bucle “for” y el resultado que se obtiene es la evaluación de cada palabra y no de cada una de las líneas del fichero.

   1:  #!/bin/bash

   2:  

   3:  for i in $(cat file.txt)

   4:  do

   5:     echo $i

   6:  done

La solución consiste en utilizar un bucle “while” de la siguiente manera:

   1:  #!/bin/bash

   2:  

   3:  while read linea

   4:  do

   5:     echo -e $linea

   6:  done < fichero

Es mucho más simple que usar el bucle “for”.

También es posible utilizar el bucle “for” para leer un fichero cambiando el separador de campo interno (IFS).

   1:  #!/bin/bash

   2:  

   3:  #Almacenamos el valor original de la variable IFS

   4:  oldIFS=$IFS

   5:  

   6:  #Cambiamos el valor del IFS

   7:  IFS=$'\n'

   8:  

   9:  for line in $(cat file.txt)

  10:  do

  11:      echo $line

  12:  done

  13:  

  14:  #Restauramos el IFS

  15:  IFS=$oldIFS

El resultado de esta ejecución es la salida en pantalla de cada una de las líneas del fichero.