Unix / Linux - Типы циклов оболочки

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

  • Цикл while
  • Цикл for
  • До цикла
  • Выбор цикла

Вы будете использовать разные петли в зависимости от ситуации. Например,whileцикл выполняет заданные команды до тех пор, пока данное условие не останется истинным; тоuntil цикл выполняется до тех пор, пока данное условие не станет истинным.

Когда у вас будет хорошая практика программирования, вы приобретете опыт и, таким образом, начнете использовать соответствующий цикл в зависимости от ситуации. Вот,while и for циклы доступны в большинстве других языков программирования, таких как C, C++ и PERL, и т.д.

Вложенные петли

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

Вот пример вложения whileпетля. Другие циклы могут быть вложены в зависимости от требований программирования аналогичным образом -

Вложение во время циклов

Можно использовать цикл while как часть тела другого цикла while.

Синтаксис

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

пример

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

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

Это даст следующий результат. Важно отметить, какecho -nздесь работает. Вот-n опция позволяет эхо избегать печати символа новой строки.

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