Unix / Linux: tipos de bucle de shell
En este capítulo, discutiremos los bucles de shell en Unix. Un bucle es una poderosa herramienta de programación que le permite ejecutar un conjunto de comandos repetidamente. En este capítulo, examinaremos los siguientes tipos de bucles disponibles para los programadores de shell:
Utilizará diferentes bucles según la situación. Por ejemplo, elwhileloop ejecuta los comandos dados hasta que la condición dada permanece verdadera; launtil El bucle se ejecuta hasta que se cumple una condición determinada.
Una vez que tenga una buena práctica de programación, obtendrá la experiencia y, por lo tanto, comenzará a usar el bucle adecuado según la situación. Aquí,while y for los bucles están disponibles en la mayoría de los otros lenguajes de programación como C, C++ y PERLetc.
Bucles de anidación
Todos los bucles admiten el concepto de anidación, lo que significa que puede colocar un bucle dentro de otro similar o bucles diferentes. Este anidamiento puede aumentar hasta un número ilimitado de veces según sus necesidades.
Aquí hay un ejemplo de anidación whilelazo. Los otros bucles se pueden anidar según el requisito de programación de una manera similar:
Anidamiento de bucles while
Es posible utilizar un bucle while como parte del cuerpo de otro bucle while.
Sintaxis
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
Ejemplo
A continuación, se muestra un ejemplo sencillo de anidación de bucles. Agreguemos otro ciclo de cuenta regresiva dentro del ciclo que usó para contar hasta nueve -
#!/bin/sh
a=0
while [ "$a" -lt 10 ] # this is loop1
do
b="$a"
while [ "$b" -ge 0 ] # this is loop2
do
echo -n "$b "
b=`expr $b - 1`
done
echo
a=`expr $a + 1`
done
Esto producirá el siguiente resultado. Es importante notar cómoecho -ntrabaja aquí. aquí-n La opción permite que echo evite imprimir un carácter de nueva línea.
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0