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