miércoles, 12 de enero de 2011

Formas 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 :P


   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.Leer línea por línea un fichero en Bash

martes, 11 de enero de 2011

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.