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

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

Рекомендуем: Ремонт трещин и сколов на лобовом стекле
eda2480d

Содержание

В этом разделе нашего учебного пособия по 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:


PHP. Объекты, шаблоны и методики программирования, 4-е издание (Мэт Зандстра)

Четвертое издание книги было пересмотрено и дополнено новым материалом. Книга начинается с обзора объектно-ориентированных возможностей PHP, в который вклю...

21 06 2021 18:51:53

Преобразования типов в C#

Что такое конверсии в C#? Преобразование - это механизм преобразования значения одного типа в эквивалентное значение другого типа.  Давайте рассмотрим ниже...

20 06 2021 20:38:38

1С: Предприятие,Эффективное программирование (Т.Н. Усиков)

Описан встроенный язык программирования пакета «1 С: Предприятие», методы настройки и конфигурирования системы с его помощью. Дополнительно содержит необход...

19 06 2021 12:26:54

Что такое интерфейс в C#

Что такое интерфейс? Интерфейс похож на чистый абстрактный класс, который содержит только абстрактные методы Детский класс должен обеспечить реализацию для...

18 06 2021 7:25:43

Разница между памятью Stack and Heap в Java

Модель Java Heap и Stack Memory определяет, как и когда разные потоки могут видеть значения, записанные в общие переменные другими потоками, и как синхрони...

17 06 2021 14:23:10

Отображение значимых цифр в C#

Число значащих цифр в числе - это число цифр, которые содержат значимую информацию. К ним относятся все отображаемые цифры, кроме начальных и конечных нуле...

16 06 2021 5:59:23

Как найти пятницу тринадцатое в C#

Код сначала очищает результат ListBox. Затем он получает даты начала и окончания и использует их для получения номеров начала и конца года. Далее программа...

15 06 2021 8:48:31

Что такое Java

Java - это язык программирования, который разработчики используют для создания приложений на ваших компьютерных устройствах. Sun Microsystems выпустила пер...

14 06 2021 12:11:38

Добавить варианты ComboBox во время выполнения в C#

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

13 06 2021 13:52:45

Нарисуйте цветное колесо в C#

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

12 06 2021 15:10:33

Позвольте пользователю увеличить изображение на C#

Пример Предоставление автосохранения в C# объясняет, как сделать программу, которая позволяет пользователь рисует линии в разных цветах и стилях. Эта прогр...

11 06 2021 20:40:20

HashMap в Java

В терминах компьютерного программирования карта представляет собой набор ассоциаций между парами объектов. Java HashMap - это базовая реализация интерфейса...

10 06 2021 3:20:37

Пространство имен в C#

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

09 06 2021 12:56:43

Ассемблер на примерах. Базовый курс (Рудольф Марек)

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

08 06 2021 15:56:42

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

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

07 06 2021 22:48:21

Как генерировать случайные целые числа в определенном диапазоне в Java

В Java 1.7 или более поздней версии стандартный способ сделать это выглядит следующим образом: min: минимальное значение max: максимальное значение Пример...

06 06 2021 1:23:17

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

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

05 06 2021 16:52:57

Нарисуйте кривую с более четко очерченными цветами в C#

В сообщении Нарисуйте кривую с резким оговоренные цвета в C# . Я упомянул, что вы можете достичь еще более резких цветов, если используете TextureBrush. Ес...

04 06 2021 0:18:21

Как распечатать содержимое элемента управления ListView на нескольких страницах в C#

Когда программа печатает в .NET, объект PrintDocument вызывает обработчик события PrintPage для создания каждой страницы. Эта программа должна установить п...

03 06 2021 17:34:36

Программирование на С++ глазами хакера, 2-е издание (Михаил Фленов)

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

02 06 2021 11:30:29

Каковы основные интерфейсы Java Collections Framework

Структура Java Collection обеспечивает интерфейсы и реализации классов, которые позволяют обрабатывать данные простым и значимым. Интерфейс Collection нахо...

01 06 2021 0:32:23

Класс BufferedReader в Java

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

31 05 2021 8:56:50

Как сделать прозрачные изображения на C#

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

30 05 2021 3:42:39

Исключения в Java

Исключение - это событие, которое происходит во время выполнения программы, что нарушает нормальный поток инструкций программы. Он обеспечивает способ пере...

29 05 2021 10:53:54

Объясните методы split () модуля «re» в Python

Модуль «re» в Python обеспечивает операции согласования регулярных выражений, аналогичные тем, которые были найдены в Perl. Оба шаблона и строки для поиска...

28 05 2021 11:39:56

В чем разница между классом и прототипным наследованием?

Класс похож на план. Классический подход к созданию объекта состоит в том, чтобы определить структуру объекта, используя объявление CLASS и создать экземпл...

27 05 2021 16:52:16

Языки программирования для начинающих: с чего лучше начать?

Какие языки программирования подходят для начинающих? С какого лучше начать? В наше время программирование стало одной из самых востребовательных и высокооплачиваемых...

26 05 2021 11:53:20

Получить HTML содержимое веб-страницы с помощью Python

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

25 05 2021 4:12:10

Анимировать несколько прыгающих мячей в C#

В этом примере изменена более ранняя публикация Сделать анимацию отскока шара в C# для анимации нескольких прыгающих шаров. Большая часть основной идеи так...

24 05 2021 10:49:43

Понимание символа "@" в C#

Символ @ может быть довольно запутанным для некоторых разработчиков C. Я даже знал некоторых, кто программировал довольно долгое время, но у которых все ещ...

23 05 2021 17:28:47

Выберите разрешение принтера в C#

В этом примере показано, как разрешить пользователю выбирать разрешение принтера. Когда вы устанавливаете принтер объекта PrintDocument, его коллекция Defa...

22 05 2021 23:45:10

Ассемблер - это просто. Учимся программировать. (Калашников О. А.)

Подробно и доходчиво объясняются все основные вопросы программирования на ассемблере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, о...

21 05 2021 8:42:34

Как ClassLoader работает на Java?

Java Classloader является частью JRE (Java Runtime Environment), которая динамически загружает классы Java в JVM (виртуальная машина Java). В частности, Ja...

20 05 2021 5:41:47

Сортировка частично числовых элементов в ComboBox или ListBox в C#

Пример Использование пользовательского порядка сортировки для элементов ListBox или ComboBox в C# показывает, как сортировать числовые значения. В этом при...

19 05 2021 21:50:10

Обработка XML-файлов Python

Что такое XML? XML означает расширяемый язык разметки . Стандарт XML - это гибкий способ создания информационных форматов и электронного обмена структуриро...

18 05 2021 12:53:55

Самоучитель C++ (Г. Шилдт)

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

17 05 2021 19:53:57

Как загрузить CSV-файл в Excel в C#

Загрузка CSV-файла (файла значений с разделителями-запятыми) в Excel не слишком сложна, если вы знаете трюки. Используя те же трюки, вы можете загрузить фа...

16 05 2021 10:11:52

Выполнять бинарное усиление контраста интерактивно в C#

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

15 05 2021 1:30:10

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

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

14 05 2021 23:46:48

Разработка веб-приложений с помощью PHP и MySQL (Люк Веллинг, Лора Томсон)

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

13 05 2021 6:47:30

Является ли JavaScript функциональным языком программирования?

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

12 05 2021 15:50:57

Прозрачные изображения кнопок в C#

Кажется, я продолжаю писать эту программу, потому что мне нужно делать изображения кнопок довольно часто. Я хотел использовать простое изображение с прозра...

11 05 2021 22:53:35

Выбор языка программирования: 6 пунктов при выборе своего языка

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

10 05 2021 3:37:18

Рисуем гладкий текст в GraphicsPath в C#

Вы можете установить свойство TextRenderingHint объекта Graphics для AntiAliasGridFit, чтобы нарисовать гладкий текст. Однако, если вы поместите текст в об...

09 05 2021 11:51:54

Нарисуйте кривую с отрицательным напряжением в C#

Сообщение Нарисуйте кривую с разной напряженностью в C# использует метод Graphics класса DrawCurve класса для рисования набора кривых с разными напряжениям...

08 05 2021 13:50:36

Использование значений равенства для сравнения объектов шрифта в C#

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

07 05 2021 8:32:57

Инструмент, который создает файлы PNG с прозрачным фоном в C#

Когда вы используете команду « Открыть» меню « Файл», следующий код позволяет вам выбрать файл изображения. В этом коде отображается OpenFileDialog. Если пол...

06 05 2021 7:32:24

Многопользовательские игры. Разработка сетевых приложений (Глейзер Дж.)

Многопользовательские игры. Разработка сетевых приложений: Сетевые многопользовательские игры — это многомиллиардный бизнес, привлекающий десятки миллионов...

05 05 2021 8:44:31

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

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

04 05 2021 2:22:27

StringTokenizer в Java

Класс StringTokenizer пакета Java.util позволяет приложению разбивать или разбивать строку на мелкие части с помощью определенного разделителя (пробел явля...

03 05 2021 12:13:51

Еще:
Программирование -1 :: Программирование -2 :: Программирование -3 :: Программирование -4 :: Программирование -5 ::

И сказал Великий Программист:
«После трёх дней без программирования жизнь теряет смысл»