Bash является стандартной командной оболочкой, которая встречается у большинства дистрибутивов MacOS и Linux. Точно также называется язык для работы с соответствующим ПО. Его изучают преимущественно системные администраторы и те, кто хочет более профессионально владеть UNIX-подобными операционными системами.
Язык Bash поддерживает переменные, условные и арифметические операторы, операции по вводу и выводу информации, массивы и разнообразные функции, а также циклы. С его помощью удается создавать скрипты, которые помогают ускорять работу программного обеспечения. Дополнительно они служат средствами автоматизации некоторых рутинных процессов.
Сегодня предстоит познакомиться не со всеми инструментами Bash-Scripts, а только с циклами. С их помощью удается выполнять различные задачи, а также обеспечивать автоматизацию некоторых операций и выбор желаемого алгоритма в зависимости от ситуации. Информация рассчитана на тех, кто уже хоть немного знаком с принципами разработки.
Основная терминология
Перед тем как работать с различными циклами, программисту потребуется запомнить несколько ключевых определений. Они пригодятся не только в Bash скриптах, но и в иных языках программирования:
- Алгоритм – набор некоторых инструкций и правил, необходимых для решения поставленной перед разработчиком задачи.
- Аргумент – значение, передаваемой в команду или функцию.
- Символ – простейшая единица отображения данных в программе или запросе. Равняется одной буквенной или символьной записи.
- Интерфейс командной строки – пользовательский интерфейс, базирующийся на основе текста. Он используется для управления документами и их просмотра.
- Константы – значение, которое не меняется во время выполнения различных операций в скриптах (исходном коде).
- Массив – множество значений. Списки или группы схожих типов значений данных, которые были предварительно сгруппированы.
- Переменная – место хранения информации в программе.
- Оператор – объект, который умеет через специальные команды умеет манипулировать операндами.
- Операнд – объекты, которыми можно манипулировать через операторы языка.
Все предложенные определения и понятия помогут лучше работать и считывать исходные коды приложений. Отдельное внимание предстоит уделить терминологии, тесно связанной с циклами. Без них выполнять большинство операций не получится.
Цикл – это…
Перед тем как работать с циклами, необходимо понять, что собой представляет соответствующий компонент. Он иногда называется «петля» или «ветвление». Цикл – это последовательность инструкций, которые будут повторять один и тот же процесс раз за разом. Происходит это до тех пор, пока приложение не получает команду на остановку или не выполняет прописанное в скрипте условие. В циклах программное обеспечение «задает вопрос» и, если ответ указывает на выполнение операции, действие реализовывается. После этого «петля» запускается снова, обрабатывая аналогичную задачу.
В Bash петля может использоваться для автоматизации некоторых распространенных процессов и команд. Рекомендуется запомнить еще несколько понятий, связанных с «ветвлением»:
- Бесконечный цикл (бесконечная петля). Так описывается непрерывное повторение блока кода приложения. Оно будет функционировать вечно, на постоянной основе. Обычно соответствующая ситуация возникает из-за условных операторов, а также функций. Они перенаправляют код обратно в используемый фрагмент, реализовывая его снова и снова. Часто становится следствием неправильно реализованной логики в скрипте.
- Итерация – один проход через набор операций, работающих с исходным кодом. Наиболее распространенным вариантом работы с итерациями является внедрение в скрипт.
- Указатель – переменная, которая включает в себя адрес места в памяти.
Теперь можно приступать к более детальному изучению петель в Bash на наглядных примерах. Изучать соответствующее направление намного проще будет тем, кто уже знаком с ветвлениями в других языках разработки.
Классификация
Петли у большинства языков разработки могут быть разными. В зависимости от типа loop будет меняться принцип работы рассматриваемого компонента и особенности реализации различных задач. Bash не является исключением.
Существуют различные варианты «петель»:
- цикл for (in do) – со счетчиком;
- цикл while – с постусловием;
- цикл until – с предусловием.
Bash допускает использование loops как в скриптах, так и непосредственно в командной оболочке. Далее каждый вариант петли будет изучен более подробно.
Циклы for
For in do – самый простой вариант петли. Он у большинства языков программирования называется циклом со счетчиком. Особо полезен тогда, когда программист точно знает количество итераций (сколько раз нужно повторить фрагмент) алгоритма. For позволяет просто обрабатывать по очереди все элементы в пределах массива без контроля количества повторений.
For предусматривает несколько синтаксических форм и умеет вести себя различными способами. Все зависит от первоначально поставленной перед разработчиком цели. Для того, чтобы перебирать компоненты в списке, рекомендуется пользоваться следующей формой for in do:
Каждая петля for, независимо от типа, начинается с ключевого слова for. Далее ситуация зависит от того, какой именно вариант рассматриваемого элемента применяется. В предложенном после for указывается имя переменной, в которой сохраняется каждый компонент списка. Далее указывается ключевое слово in и список. Спектр команд на выполнение размещаются между do и done.
Наглядный пример
Чтобы лучше понять, как выполняется for in do, рекомендуется рассмотреть процесс на наглядном примере. Предстоит написать скрипт, который будет выводить номера от 1 до 5:
- Сначала формируется команда: $ vi for1.sh.
- Далее пишется фрагмент: #!/bin/bash
for number in 1 2 3 4 5
do
echo $number
done. - Скрипт запускается: $ chmod +x for1.sh
./for1.sh.
Выше – наглядный пример получившегося результата. Петле можно передавать любые массивы. Пример – вывод той или иной команды:
Соответствующий фрагмент с for I in do выведет список всех сетевых интерфейсов, которые были подключены к системе. Петли допускают не только вывод операций, но и их непосредственную реализацию.
Как в C++
For в Bash может быть реализован в нескольких формах. Первый рассмотренный вариант является элементарным и используется достаточно часто в большинстве скриптов. Второй вариант for – это СИ-подобная форма. Она напоминает реализацию петли в C и C++. Это непосредственный цикл со счетчиком. Он включает в себя несколько компонентов:
- инициализатор счетчика;
- условие для выполнения;
- непосредственные операции над счетчиком.
Синтаксическая форма представления такого for in do выглядит так:
Соответствующий вариант for является более сложным, но он позволяет выполнять более сложные операции. С его помощью удается не только перебирать массивы информации, но и выполнять строго определенное количество итераций. Лучше всего изучать процесс на наглядном примере.
Код и его пояснение
Вот так будет выглядеть фрагмент кода, который наглядно объяснит принцип работы for со счетчиком:
Результат может показаться странноватым, но здесь необходимо обратить внимание на выполнение проверки условия:
- Имеющееся значение сравнивает с эталоном.
- Действие с переменной счетчиком реализовывается сразу после завершения ключевого (основного) блока команд. Только после этого осуществляется сравнение.
- При первом выполнении i = 1, после обработки кода – 2ю
- К концу 10-го прохода i = 10. Условие не будет выполнено, так как результат сравнения не является истиной.
Текущая форма for in do echo позволяет самостоятельно создавать бесконечные циклы:
Выйти из бесконечного loop-компонента, а также из «обычного» for разрешено преждевременно. Для этого разработчик должен использовать команду break:
Применять break на практике не рекомендуется. Обычно данный оператор используется тогда, когда приложение ввиду тех или иных ошибок создало бесконечную петлю.
С постусловием
Циклы For в Bash уже изучены, но есть и другие варианты ветвлений. Они используются для более сложных операций. Второй вариант петли – это loop с постусловием.
Его суть отличается от for I in do. Такой цикл будет повторяться до тех пор, пока выполняется заданное в объявлении конструкции условие. Никаких счетчиков тут нет. Конструкция заменяет if в некоторых языках программирования.
Синтаксическая форма записи loop с while:
Работает конструкция так:
- Сначала выполняется проверка на правильность условия.
- Если результат – логическая истина, то произойдет обработка предложенных команд. После этого система снова проверит «правильность» условия.
- Приложение работает до тех пор, пока результат вычислений – true. Как только итогом станет логическая ложь (false), система передаст управление следующему после петли оператору.
Выше – наглядный пример с while. Сначала здесь устанавливается значение счетчика, равное 1. Далее в условии оно будет сравниваться с 5. Пока счетчик менее указанного «параметра», реализовываются команды, прописанные в блоке do-done then echo. В соответствующем блоке требуется на единицу с каждой итерацией увеличивать значение счетчика. Команда тоже реализовывается в полной мере.
Через while допускается считывание нескольких строк из стандартного ввода:
Приложение будет требовать новые строки до тех пор, пока не передается символ конца файла. Для этого используется сочетание клавиш Ctrl + D. Бесконечные петли через while организовать проще, чем посредством for:
Выше – наглядный пример соответствующей операции.
Циклы с until
Циклы for и while встречаются в разработке достаточно часто. Есть еще один вариант «петлей» – это фрагмент с предусловием. Он напоминает while. Отличается от «предшественника» только принципами работы заданного условия.
Чтобы написанные в скрипте команды выполнялись, результат расчетов написанного выражения должен быть ложным (fi false). Циклы until – полная противоположность while. Синтаксическая форма записи:
А вот наглядный пример со счетчиком:
Здесь сначала задается значение счетчика, равное 1. Каждая итерация увеличит соответствующий параметр на единицу. Как только значение счетчика оказывается больше 10, loop прекращает работу.
Для выхода из цикла в until и while допускается использование дополнительных команд. Они позволяют «досрочно» завершить работу с фрагментом кода и остановить программный код.
Принцип работы break
Оператор break может быть использован не только с циклами с пост- и предусловием, но и в for. Он отвечает за завершение текущей петли, после чего передает управление приложением команде, написанной после завершенной. Часто применяется для того, чтобы завершить цикл при выполнении конкретного условия.
Здесь программа прекращает работать, когда имя файла станет Lithium.
Использование continue
При работе с for sh и другими циклами может потребоваться реализация такого оператора как continue. Он работает подобно break. Отвечает за завершение текущей итерации, после чего передает управление программным обеспечением следующей итерации в пределах цикла.
Вот – наглядный пример перебора заданного числового диапазона. Оператор continue вернет выполнение к началу цикла тогда, когда текущий повторяемый компонент будет равен 2. После этого программа продолжит следующий проход через имеющийся фрагмент кода.
Как быстрее освоить тему
Циклы for в Bash – это не так сложно, как может показаться. Чтобы лучше изучить особенности применения петель в разработке, а также научить писать сложные приложения с нуля, рекомендуется обратить внимание на дистанционные онлайн-курсы. Они гарантируют:
- разнообразие направлений для обучения и возможность освоить любое IT-направление;
- совмещение с работой, семьей и другими делами – весь процесс организован через интернет;
- записи вебинаров и уроков – пропущенные занятие удастся посмотреть в любое время;
- сжатые сроки обучения – курсы рассчитаны на срок до 12 месяцев;
- постоянное кураторство опытными специалистами в выбранной области и помощь в формировании первого портфолио;
- интересные домашние задания и практические задачи.
При успешном завершении курса пользователю будет вручен электронный сертификат установленного образца. Он подтвердит приобретенные знания, навыки и умения.