Los bucles en Shell Script son muy simples:
for VARIABLE in SERIE; do
bloque de comandos
done
En cada iteración la variable VARIABLE toma un valor de SERIE, que en caso de no contener elementos hará que no se ejecute nada y se devuelva un valor 0. En caso de que se ejecuten comandos, el resultado devuelto tras el bucle es el del último comando ejecutado.
Ejemplos de bucle:
for i in 1 2 3 4 5; do echo $i done
Nota: para generar los números que se ponen después del ‘in’ se puede usar el comando seq que genera una secuencia de números si le indicamos el inicio y el final. El bucle anterios se podría poner así:
for i in $(seq 1 5); do echo $i done
Ejemplo con palabras:
for palabra in uno dos tres cuatro cinco; do echo $palabra done
Ejercicios
#!/bin/bash
echo "Ficheros del directorio actual y su tamaño";
ficheros=$(find -type f);
for i in $ficheros;do
num_lineas=$(wc -l $i | cut -d" " -f1);
echo "Nombre del fichero: $i";
echo "Contiene $num_lineas lineas";
echo " ";
done;
#!/bin/bash
echo "Nombres de los usuarios y sus grupos";
nom_usuario=$(who | cut -d" " -f1 | sort | uniq);
for i in $nom_usuario; do
gid=$(grep "\b$i\b" /etc/passwd | cut -d":" -f4);
grupo=$(cut -d":" -f1,3 /etc/group | grep "\b$gid\b" | cut -d":" -f1);
echo "El usuario es $i y su grupo es $grupo";
done;
#!/bin/bash
# Borrar usuarios con IDs comprendidos entre dos números pasado por parámetro
for i in $(seq $1 $2); do
nombre=$(cut -d":" -f1,3 /etc/passwd | grep "\b$i\b" | cut -d":" -f1);
$(userdel -r $nombre);
done;
Esto es todo, ya sabemos hacer bucles en Shell Script 😉













