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 😉