Путь разработчика    

Циклы в Bash (for, while, until, break, continue, select)


Содержание

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

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

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

Цикл While

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

Shell

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

while_loop.sh

Shell

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

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

Цикл Until

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

 Пример:until_loop.sh
Shell

Цикл For

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

Shell

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

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

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

Shell

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

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

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

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

Break

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

copy_files.sh

Shell

Continue

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

copy_check.sh

Shell

Select

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

Shell

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

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

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

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

select_example.sh

Shell

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

  • Строка 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



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Что такое singleton класс в Java?

В объектно-ориентированном программировании шаблон Singleton ограничивает создание экземпляра класса и гарантирует, что в JVM (виртуальная машина Java) сущ...

14 09 2019 18:16:36

Алгоритмы и программы на Turbo Pascal. Учебный курс (Ю. Федоренко)

Книга " Алгоритмы и программы на Turbo Pascal. Учебный курс" предназначена для самостоятельного изучения одного из самых популярных языков программирования....

13 09 2019 5:53:45

Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS (Р. Никсон)

Научитесь создавать современные динамические веб-сайты, даже если у вас нет опыта в программировании. Если вы умеете писать статические сайты на HTML, то с...

12 09 2019 11:56:41

Перетаскивание изображений при отображении предварительного просмотра в C#

Пример Перетаскивание изображений в C# объясняет, как для перетаскивания изображений. См. Этот пример для основных идей. ( Обратите особое внимание на второ...

11 09 2019 6:26:47

Преобразование массива байтов в целое число и обратно в C#

Класс BitConverter предоставляет статические методы, которые позволяют преобразовывать различные типы данных в и из массивов байтов. ( Я полагаю, что было б...

10 09 2019 16:38:46

Какова цель класса Runtime и System?

Класс System содержит несколько полезных полей и методов класса. Целью класса System является обеспечение доступа к системным ресурсам. Это последний класс...

09 09 2019 19:34:51

Изменение ориентации и полей печати в C#

В этом примере показано, как изменить ориентацию и поля печати в распечатке или предварительном просмотре печати. По умолчанию, когда вы показываете предва...

08 09 2019 11:31:57

Нарисуйте текст на сегменте линии в C#

В этом примере показано, как вы можете нарисовать текст в сегменте линии. Ключ - это метод DrawTextOnSegment, показанный в следующем коде. Этот метод может...

07 09 2019 8:36:15

Как использовать ProgressBar в C#

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

06 09 2019 11:53:48

This в JavaScript

This ключевое слово является одним из самых запутанных и непонятных частей JavaScript. Ключевое слово this this ведет себя по-разному в JavaScript по сравн...

05 09 2019 10:33:20

Закрыть всплывающие окна Mozilla Firefox в C#

Некоторые средства браузера пытаются заблокировать всплывающие окна рекламы, но в последнее время некоторые из них пробираются через мою систему, поэтому я...

04 09 2019 2:45:51

Комментарии в C#

Комментарии используются для документирования того, что делает программа, и каких конкретных блоков или строк кода.  Компилятор C# игнорирует комментарии. Е...

03 09 2019 2:25:47

Дата и время в Python

Python предоставляет разработчику несколько инструментов для работы с датой и временем . Стандартные библиотеки содержат такие модули, как: Дата и время Вр...

02 09 2019 9:26:39

Изменение ориентации и полей печати в C#

В этом примере показано, как изменить ориентацию и поля печати в распечатке или предварительном просмотре печати. По умолчанию, когда вы показываете предва...

01 09 2019 20:43:38

Нарисуйте водяной знак в C#

Пример Использование ColorMatrix для добавления водяного знака к изображению на C# показывает один способ добавления водяного знака к изображению. В этом п...

31 08 2019 9:24:42

Как отобразить текст в StatusLabel, даже если он не подходит для C#

Если текст, отображаемый в StatusLabel, слишком длинный, чтобы вписаться в содержащийся элемент StatusStrip, тогда по умолчанию StatusLabel не показывать ч...

30 08 2019 15:24:54

Что такое ссылки на методы в Java?

Ссылки на методы являются признаком Java 8. Самое большое дополнение в Java8 - это лямбда-выражения. Ссылка на метод - это сокращенный синтаксис выражения...

29 08 2019 1:51:11

Секреты профессиональной работы с «1С:Бухгалтерией 8». БАНК и КАССА (С. Харитонов , Д. Чистов)

В книге " Секреты профессиональной работы с «1 С: Бухгалтерией 8». Б А Н К и К А С С А" рассматривается порядок учета банковских и кассовых операций, расчетов с подо...

28 08 2019 10:20:17

Используйте очередь для рисования двоичного дерева с шириной первого цвета в C#

Пример Нарисуйте ширину в ширину двоичное дерево в C# показывает, как использовать Stack для рисования двоичного дерева в порядке глубины. Программа создае...

27 08 2019 11:13:34

Каковы функции help() и dir() разные?

В Python help() - это супер полезная встроенная функция, которая может быть использована для возврата документации Python для конкретного объекта, метода,...

26 08 2019 17:27:28

Найти предков класса в C#

Пример Найти классы, реализующие интерфейс или являющиеся потомками данного класса в C# , показывает, как найти список классов, которые являются потомками...

25 08 2019 2:28:16

Сделайте движущийся фон в C#

В этом примере отображается текст с движущимся цветовым градиентом. Следующий ShadeRect метод содержит наиболее интересный код программы. Этот метод заполн...

24 08 2019 20:35:57

Печать изображений в C#

В этом примере показан простой способ печати изображений. Когда вы печатаете, обработчик события PrintPocument PrintDocument предоставляет объект Graphics...

23 08 2019 13:19:25

Найти имя компьютера - Python

Существует несколько способов найти имя компьютера на Python. Модуль «socket» в Python обеспечивает доступ к интерфейсу сокетов BSD . Он доступен для всех...

22 08 2019 19:35:17

Управление торговлей 1С:8.2. Редакция 11. Внедрение и применение (Тенгиз Куправа) 2012

Книга " Управление торговлей 1 С:8.2. Редакция 11. Внедрение и применение" раскрывает вопросы внедрения и применения принципиально нового продукта компании 1...

21 08 2019 16:18:34

Позвольте пользователю писать на PictureBox в C#

Класс Graphics предоставляет метод DrawLines, который рисует ряд связанных строк, который иногда называют полилинией. Эта программа позволяет пользователю...

20 08 2019 17:34:53

Основа для карточной игры в C#

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

19 08 2019 11:51:59

Отображать изображения в базе данных Access в WPF и C#

В этом примере показано, как вы можете отображать изображения, хранящиеся в базе данных Access в программе WPF. Вы можете сделать это с помощью связанных э...

18 08 2019 7:37:21

Современные языки программирования: список 2018

Список современных языков программирования на 2018 год. Чтобы определиться с конкретным языком программирования для изучения (одним или несколькими) нужно для начала ответить себе на вопрос:...

17 08 2019 12:41:12

Используйте «округление банкира» и «нормальное округление» в C#

По умолчанию метод Math.Round использует «округление банкира». При округлении банкира число с конечной цифрой 5 округляется до ближайшего четного числа, а...

16 08 2019 23:36:15


Parse error: syntax error, unexpected ',' in /home/users/9/9161484547/domains/flash-mx.ru/lessons/926.php on line 69