Saltar a contenido

Estructura FOR IN

FOR IN

FOR IN

for VARIABLE in LISTA
do
        ACCIONES
done
  • Permite recorrer una lista.

  • Importante el espacio entre los corchetes y el uso de “do” y “done” para crear la estructura.

  • Por defecto se interpreta como un objeto de la lista todo aquello que va separado por un espacio en blanco.

  • Usaremos una variable y en cada iteración dicha variable tendrá un valor de la lista.

Iteración

Se refiere a cada vez que se va ejecutando el bucle. La primera ejecución con el primer objeto de la lista es la primera iteración, la segunda vez será la segunda iteración, y así sucesivamente.

Ejemplos de listas.

Ejemplo de lista usando literales.

iteracion=1
for nombres in Salva Pepe Juan Domingo
do
        echo "En la iteracion $iteracion la variable vale $nombres"
        let iteracion=$iteracion+1
done

Ejemplo de lista usando variables.

directorios=`ls`
iteracion=1
for nombres in $directorios
do
        echo "El directorio en la iteracion $iteracion es $nombres"
        let iteracion=iteracion+1
done

Ejemplo de lista usando comandos.

iteracion=1
for nombres in `ls`
do
        echo "El directorio en la iteracion $iteracion es $nombres"
        let iteracion=iteracion+1
done

Ejemplos genéricos.

Ejemplos usando el comando seq.

for numero in `seq 1 10`
do
        echo "Ahora la variable numero vale $numero
done

Ejemplos con un for anidado.

filas=5
columnas=5
for fila in `seq 1 $filas`
do
        for col in `seq 1 $columnas`
        do
                echo -n "*"
        done
        #Para saltar de linea.
        echo
done

Ejemplo recorriendo un fichero SIN espacios en blanco.

#Solo nos quedamos con los primeros 3 campos porque el 4 de informacion personal
#puede contener espacios
for linea in `cat /etc/passwd | cut -d':' -f1-3`
do
        #Nos quedamos con el nombre de usuario y su uid.
        userID=`echo $linea | cut -d':' -f3`
        usuario=`echo $linea | cut -d':' -f1`
        #Si su UID es mayor de 1000 y menor de 65534 es un usuario normal.
        if [[ $userID -ge 1000 && $userID -lt 65534 ]]
        then
                echo "$usuario es un usuario normal"
        fi
done

Ejemplo recorriendo un fichero CON espacios en blanco usando IFS.

Cambiar el IFS

IFS=$'{\n}'

  • El IFS es el separador por defecto del sistema.

  • Existe la variable de entorno $IFS que nos indica cuál es.

  • Podemos modificarla dentro de nuestro script como cualquier variable 🔀 IFS=$'{\n}'

  • Por defecto el IFS es el espacio en blanco, por esa razón cada objeto de una lista está separado por un espacio en blanco.

En el siguiente ejemplo cambiamos el IFS al salto de línea, de esta forma cada iteración coge una linea entera.

IFS=$'{\n}'

for linea in `ls -l | tr -s ' '`
do
        echo $linea
done

Vídeo de Ejemplo.

  1. Vídeo Ejemplo Estructura For in