Учебники

Unix / Linux — Shell Loop Control

В этой главе мы обсудим управление циклом оболочки в Unix. До сих пор вы рассматривали создание циклов и работу с циклами для решения различных задач. Иногда вам нужно остановить цикл или пропустить итерации цикла.

В этой главе мы изучим следующие два утверждения, которые используются для управления циклами оболочки:

  • Оператор перерыва

  • Продолжение заявления

Оператор перерыва

Продолжение заявления

Бесконечный цикл

Все циклы имеют ограниченный срок службы, и они выходят, как только условие ложно или истинно в зависимости от цикла.

Цикл может продолжаться вечно, если требуемое условие не выполняется. Цикл, который выполняется вечно без завершения, выполняется бесконечное количество раз. По этой причине такие циклы называются бесконечными циклами.

пример

Вот простой пример, который использует цикл while для отображения чисел от нуля до девяти —

#!/bin/sh

a=10

until [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

Этот цикл продолжается вечно, потому что a всегда больше или равно 10 и никогда не меньше 10.

Заявление о перерыве

Оператор break используется для прекращения выполнения всего цикла после завершения выполнения всех строк кода вплоть до оператора break. Затем он спускается до кода, следующего за концом цикла.

Синтаксис

Следующий оператор break используется для выхода из цикла:

break

Команда break также может использоваться для выхода из вложенного цикла, используя этот формат —

break n

Здесь n указывает n- й замкнутый цикл для выхода из.

пример

Вот простой пример, который показывает, что цикл завершается, как только становится 5 —

#!/bin/sh

a=0

while [ $a -lt 10 ]
do
   echo $a
   if [ $a -eq 5 ]
   then
      break
   fi
   a=`expr $a + 1`
done

После выполнения вы получите следующий результат —

0
1
2
3
4
5

Вот простой пример вложенного цикла for. Этот скрипт прерывает оба цикла, если var1 равно 2, а var2 равно 0

Live Demo

#!/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

После выполнения вы получите следующий результат. Во внутреннем цикле у вас есть команда break с аргументом 2. Это означает, что если условие выполнено, вы должны выйти из внешнего цикла и, в конечном счете, из внутреннего цикла.

1 0
1 5

Продолжение заявления

Оператор continue аналогичен команде break , за исключением того, что он вызывает выход из текущей итерации цикла, а не всего цикла.

Этот оператор полезен, когда произошла ошибка, но вы хотите попробовать выполнить следующую итерацию цикла.

Синтаксис

continue

Как и в операторе break, для команды continue можно указать целочисленный аргумент, чтобы пропустить команды из вложенных циклов.

continue n

Здесь n указывает n- й замкнутый цикл для продолжения.

пример

Следующий цикл использует оператор continue, который возвращается из оператора continue и начинает обработку следующего оператора —

Live Demo

#!/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

После выполнения вы получите следующий результат —