Unix / Linux - Control de bucle de shell
En este capítulo, discutiremos el control de bucle de shell en Unix. Hasta ahora, ha examinado la creación de bucles y el trabajo con bucles para realizar diferentes tareas. A veces es necesario detener un bucle u omitir iteraciones del bucle.
En este capítulo, aprenderemos a seguir dos declaraciones que se utilizan para controlar los bucles de shell:
los break declaración
los continue declaración
El bucle infinito
Todos los lazos tienen una vida limitada y salen una vez que la condición es falsa o verdadera dependiendo del lazo.
Un bucle puede continuar para siempre si no se cumple la condición requerida. Un bucle que se ejecuta para siempre sin terminar se ejecuta un número infinito de veces. Por esta razón, estos bucles se denominan bucles infinitos.
Ejemplo
A continuación, se muestra un ejemplo sencillo que utiliza la while bucle para mostrar los números del cero al nueve -
#!/bin/sh
a=10
until [ $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
Este bucle continúa para siempre porque a es siempre greater than o equal to 10 y nunca es menos de 10.
La declaración de descanso
los breakLa instrucción se usa para terminar la ejecución de todo el ciclo, después de completar la ejecución de todas las líneas de código hasta la instrucción break. Luego desciende al código que sigue al final del ciclo.
Sintaxis
El seguimiento break La declaración se usa para salir de un bucle -
break
El comando break también se puede usar para salir de un bucle anidado usando este formato:
break n
aquí n especifica el nth lazo envolvente a la salida de.
Ejemplo
Aquí hay un ejemplo simple que muestra que el ciclo termina tan pronto como a se convierte en 5 -
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
Tras la ejecución, recibirá el siguiente resultado:
0
1
2
3
4
5
Aquí hay un ejemplo simple de bucle for anidado. Este script sale de ambos bucles sivar1 equals 2 y var2 equals 0 -
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ]
then
break 2
else
echo "$var1 $var2"
fi
done
done
Tras la ejecución, recibirá el siguiente resultado. En el bucle interno, tiene un comando de interrupción con el argumento 2. Esto indica que si se cumple una condición, debe salir del bucle externo y, en última instancia, también del bucle interno.
1 0
1 5
La declaración de continuar
los continue declaración es similar a la break comando, excepto que hace que salga la iteración actual del ciclo, en lugar de todo el ciclo.
Esta declaración es útil cuando se ha producido un error pero desea intentar ejecutar la siguiente iteración del ciclo.
Sintaxis
continue
Al igual que con la instrucción break, se puede proporcionar un argumento entero al comando continue para omitir comandos de bucles anidados.
continue n
aquí n especifica el nth bucle adjunto desde el que continuar.
Ejemplo
El siguiente bucle hace uso del continue instrucción que regresa de la instrucción continue y comienza a procesar la siguiente instrucción -
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2`
if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
Tras la ejecución, recibirá el siguiente resultado:
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number