Cómo: realizar un bucle en Bash con ejemplos

Hacer bucles en Bash es una construcción de bucles muy importante en la programación del shell Bash. Básicamente, se utiliza un bucle en Bash para iterar sobre una serie de palabras dentro de líneas. Esta publicación describe un bucle en Bash con todos los ejemplos necesarios.

La sintaxis básica para un bucle en Bash es:

for { variable name } in { list }
 
do
 
Command1
 
Command2
 
.
 
.
 
CommmandN
 
done

Un ejemplo de bucle en Bash:

1: bucle simple:

En el siguiente ejemplo para un bucle en Bash, hemos inicializado la variable i. Esta variable forma parte de un bucle de una serie de 1 a 5 incrementando el valor de 1. Proceso el mismo valor de variable en un comando que repite el valor de i.

	
[root@destroyer ~]# cat for_loop_test.sh
for i in 1 2 3 4 5
do
echo "????? ?????????? ?? AndreyEx $i ???"
done
[root@destroyer ~]# chmod u+x for_loop_test.sh
[root@destroyer ~]# ./for_loop_test.sh
????? ?????????? ?? AndreyEx 1 ???
????? ?????????? ?? AndreyEx 2 ???
????? ?????????? ?? AndreyEx 3 ???
????? ?????????? ?? AndreyEx 4 ???
????? ?????????? ?? AndreyEx 5 ???
[root@destroyer ~]#

2. Bucle adicional en Bash para la versión 4.0:

En el ejemplo 1 anterior, comenzamos el ciclo definiendo y escribiendo todos los valores de i. Pero, ¿qué pasa si su bucle tiene varios valores y desea iterar sobre los mismos? Bash 4.o y versiones posteriores admiten la funcionalidad donde puede definir los valores inicial y final de la serie junto con el valor de incremento. Repitamos del 1 al 12 en incrementos de 3 y puede definirlo con el ejemplo de bucle Bash a continuación.

	
[root@destroyer ~]# for i in {0..12..3}
> do
> echo "????? ?????????? AndreyEx $i ???"
> done
????? ?????????? AndreyEx 0 ???
????? ?????????? AndreyEx 3 ???
????? ?????????? AndreyEx 6 ???
????? ?????????? AndreyEx 9 ???
????? ?????????? AndreyEx 12 ???
[root@destroyer ~]#

3. Leer un directorio:

Alternativamente, puede inicializar un bucle variable con una lista de archivos en un directorio usando el siguiente ejemplo.

[root@destroyer var]# for i in $( ls )
do
echo File: $i;
done

A continuación se muestra un ejemplo de la salida de un bucle en Bash:

	
File: account
File: cache
File: crash
File: cvs
File: data
File: db
File: ftp
File: ftp_account
File: game
File: lib
File: locale
File: locks
File: log
File: mailru
File: nis
File: opt
File: preserve
File: runs
File: spools
File: temp
File: yp
[root@destroyer var]#

4. Sintaxis de la programación en C:

También puedes usar un bucle en Bash usando el lenguaje de programación C como una declaración como se muestra a continuación:

for ((i=1;i<=20;i=i+1))
do
echo $i
done

5. Contenido de la tramitación del expediente.

También puedes usar un bucle en Bash para procesar el contenido de un archivo en otro comando. Ayuda mucho a la hora de procesar grandes cantidades de datos. Si tienes un archivo con una lista de usuarios y quieres comprobar si están bloqueados o no. Luego use el siguiente ejemplo.

Un ejemplo de un archivo con una lista de usuarios.

[root@destroyer ~]# cat /tmp/users
boris
andreyex
marina
test_ftp_user
testuser
uxuser

En el siguiente ejemplo, la variable ?i? se inicializa con el comando cat y se pasa al comando ?passwd -s? comando, que tiene un argumento como $i, que no es más que un nombre de usuario, para comprobar si está bloqueado o no.

[root@destroyer ~]# for i in `cat /tmp/users`
> do
> passwd -S $i
> done
boris LK 2017-01-13 0 99999 7 -1 (Password locked.)
andreyex LK 2017-01-01 0 99999 7 -1 (Password locked.)
marina LK 2017-01-01 0 99999 7 -1 (Password locked.)
test_ftp_user PS 2017-01-07 0 99999 7 -1 (Password set, SHA512 crypt.)
testuser PS 2017-01-01 0 99999 7 -1 (Password set, SHA512 crypt.)
uxuser LK 2017-01-08 0 99999 7 -1 (Password locked.)
[root@destroyer ~]#

6. Copiar archivos a múltiples hosts

También puedes usar un bucle en Bash, donde puedes copiar archivos a múltiples hosts y no deseas escribir el mismo comando uno tras otro. En el siguiente ejemplo, copiará el archivo test.txt a los hosts: “ANDREYEX01 grayex02 manns1 grayex06”, también puede usar un bucle en Bash para que copiar el archivo sea muy sencillo.

for HOST in ANDREYEX01 andreyex02 manns1 andreyex06 
do
scp test.txt $HOST:/tmp/
done

7. Duplicación LVM:

Puede usar un bucle en Bash para reflejar la extensión booleana LV. Supongamos que tiene un grupo de volúmenes vg00 con 10 LV y desea reflejarlo con PV sde1. Luego puedes usar un bucle para ejecutarlo en una solución simple y compacta de una sola vez.

for i in 1 2 3 4 5 6 7 8 9 10
do
lvextend -m 1 /dev/vg00/lvol$i /dev/sde1
done

8. Tabla de multiplicar:

Digamos que quieres escribir un programa usando el shell Bash para una tabla de multiplicar. En el siguiente ejemplo de bucle, inicializamos la variable i, que se usará para multiplicar un dígito usando el comando expr.

if [ $# -eq 0 ]
then
echo "?????????? ??????? ????? ???????? 0"
echo "????????? : $0 ?????"
exit 1
fi
n=$1
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i * $n`"
done

Ejemplo de salida:

[root@destroyer ~]# ./myfile.sh 7
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
7 * 10 = 70

Actualizaciones del boletín

Ingrese su dirección de correo electrónico a continuación para suscribirse a nuestro boletín