Циклы for, while, until в Bash

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

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

В сценариях Bash есть три основных структуры цикла, которые мы рассмотрим ниже. Существует также несколько инструкций, которые мы можем использовать для управления работой циклов.

Цикл While

Один из самых простых циклов для работы это while.

В приведенном ниже примере мы напечатаем цифры от 1 до 10:

while_loop.sh

Давайте разберем это:

  • Строка 4 - Мы инициализируем счетчик переменных с его начальным значением.
  • Строка 5 - пока тест верен (счетчик меньше или равен 10), давайте сделаем следующие команды.
  • Строка 7 - Мы можем размещать любые команды, которые нам нравятся. Здесь используется эхо , поскольку это простой способ проиллюстрировать, что происходит.
  • Строка 8 - Используя двойные скобки, мы можем увеличить значение счетчика на 1.
  • Строка 9 - Мы находимся в нижней части цикла, поэтому возвращаемся к строке 5 и снова выполняем тест. Если тест верен, выполните команды. Если тест является ложным , то продолжить выполнение каких - либо команд следующее сделано .

Цикл Until

Цикл until довольно похож на цикл while. Разница в том, что он будет выполнять команды внутри него, пока тест не станет истинным.

 Пример:until_loop.sh

Цикл For

Цикл for немного отличается от предыдущих двух циклов. Что он делает, скажем, для каждого из элементов в данном списке, выполните заданный набор команд. Он имеет следующий синтаксис.

Цикл for принимает каждый элемент в списке (поочередно, один за другим), назначает этот элемент как значение переменной var , выполняет команды между do и done, затем возвращается к началу, захватывает следующий элемент в список и повторить.

Список определяется как ряд строк, разделенных пробелами.

Вот простой пример для иллюстрации:

Давайте разберем это:

  • Строка 4 - Создайте простой список, который представляет собой серию имен.
  • Строка 6 - для каждого из элементов в списке $ names присваивает элемент переменной $ name и выполняет следующие команды.
  • Строка 8 - эхо-имя на экране, чтобы показать, что механизм работает. У нас может быть столько команд, сколько нам нравится.
  • Строка 11 - повторите еще одну команду, чтобы показать, что скрипт bash продолжал выполнение как обычно после обработки всех элементов в списке.

Управление циклами: перерыв и продолжение

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

Break

Оператор break говорит Бэшу немедленно покинуть цикл. Возможно, что существует нормальная ситуация, которая должна привести к завершению цикла, но есть и исключительные ситуации, в которых она также должна закончиться. Например, возможно, мы копируем файлы, но если свободное место на диске становится ниже определенного уровня, мы должны прекратить копирование.

copy_files.sh

Continue

Оператор continue говорит Bash прекратить выполнение этой итерации цикла и начать следующую итерацию. Иногда есть обстоятельства, которые мешают нам идти дальше. Например, возможно, мы используем цикл для обработки ряда файлов, но если мы получим файл, который у нас не имеет разрешения на чтение, мы не должны пытаться его обрабатывать.

copy_check.sh

Select

Механизм select позволяет вам создать простую систему меню. Он имеет следующий формат:

При вызове он принимает все элементы в list (аналогично другим циклам, это набор разделенных пробелом элементов) и представляет их на экране с номером перед каждым элементом. После этого будет напечатано приглашение, позволяющее пользователю выбрать номер. Когда они выберите номер и нажмите ввести соответствующий пункт будет присвоен переменным var и команды между делать и делать выполняется. После завершения запроса будет отображаться снова, чтобы пользователь мог выбрать другую опцию.

Несколько замечаний:

  • Проверка ошибок не выполняется. Если пользователь вводит нечто, отличное от числа или числа, не соответствующего элементу, тогда var становится null (пустой)
  • Если пользователь нажимает кнопку ввода без ввода каких-либо данных, список параметров будет отображаться снова.
  • Цикл завершится, когда будет введен сигнал EOF или выдается оператор break.
  • Вы можете изменить системную переменную PS3, чтобы изменить отображаемое приглашение.

Вот простой пример, иллюстрирующий его использование:

select_example.sh

Давайте разберем это:

  • Строка 4 - настройка переменной со списком символов и последней опцией, которую мы можем выбрать для выхода. Обратите внимание, что элементы разделяются пробелом.
  • Строка 6 - Измените значение системной переменной PS3 так, чтобы в подсказке было что-то более подробное описание. (По умолчанию это #?)
  • Строки 10 - 13 - Если последний вариант, «Break», выбирается затем break из select цикла.
  • Строка 14 - Распечатайте сообщение, чтобы продемонстрировать, что механизм работал. У вас может быть так много команд здесь, как вам нравится.
  • Строка 17 - Распечатайте сообщение, чтобы показать, что сценарий продолжался как обычно после цикла выбора.

И теперь давайте запустим скрипт Bash:

 

Часть 5. If, else, case в Bash
Часть 7. Функции в Bash

Источник: https://ryanstutorials.net/bash-scripting-tutorial/bash-loops.php

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *