Цикл for в Bash: руководство и практические примеры
.jpg?w=1600&h=900&fit=crop)
Циклы — фундаментальный инструмент программирования. Они помогают сократить ручную работу и сделать обработку повторяющихся операций предсказуемой и автоматизированной. В Bash цикл for используется для итерации по спискам, диапазонам чисел, результатам команд и массивам.
Что такое цикл for в оболочке
Цикл for в shell — это конструкция для последовательного выполнения набора команд для каждого элемента в списке. Определение в одну строку: цикл последовательно присваивает переменной значение из списка и выполняет блок команд.
Кратко:
- for — ключевое слово, задаёт цикл;
- in — ввод списка значений;
- do … done — блок команд, выполняемых для каждого значения.
Базовая структура
for item in [LIST]
do
[COMMANDS]
doneПример более конкретный:
for VARIABLE in 1 2 3 4 5 .. N
do
command1
command2
commandN
doneСписок после in может быть статическим (перечислением), генерироваться диапазоном в фигурных скобках, результатом подстановки команды $(…) или элементами массива.
Открытие редактора и запуск скрипта
Откройте терминал и создайте файл скрипта в любом текстовом редакторе. В примерах ниже использован nano.
nano ForLoops.shСохраняйте скрипт с расширением .sh и делайте его исполняемым перед запуском:
chmod +x Forloops.sh
./Forloops.shПримеры: вывод целых чисел
Ниже — несколько типичных способов вывода чисел с помощью for.
1. Перечисление значений вручную
#!/usr/bin/bash
for i in 1 2 3
do
echo "Current # $i"
doneВыход будет выглядеть как последовательные строки с текущим значением переменной i.
Где:
- i — имя переменной;
- 1 2 3 — перечисление значений, по которым происходит итерация;
- do — начало блока команд;
- echo — вывод;
- done — конец цикла.
Сохраните, сделайте исполняемым и запустите как описано выше.
2. Диапазон в фигурных скобках
Альтернативный и компактный способ указать начало и конец диапазона:
for i in {1..3} # a for loop defines a variable and how many iterations you want to make through a loop
do
echo "Current # $i: Example 2"
doneДиапазон {1..3} задаёт последовательность 1, 2, 3.
3. Шаги (increment)
Если нужно пропускать значения, используйте форму {START..END..STEP}:
for i in {1..10..2}
do
echo "Number = $i"
doneГде 2 — шаг между значениями. Такой цикл выведет 1, 3, 5, 7, 9.
Вывод:
Итерация по строкам и словам
Цикл for не ограничен числами — он отлично работает со строками и списками слов.
1. Перебор простого списка строк
for name in John Jack Mary
do
echo "My name is $name"
doneРезультат — три строки, по одной на имя.
2. Условный выход из цикла
Чтобы прервать цикл при достижении условия, используйте if + break или continue:
for element in Hydrogen Helium Lithium Beryllium; do
if [[ "$element" == 'Lithium' ]]; then
break
fi
echo "Element: $element"
done
echo 'All Done!'Так как Lithium третий в списке, цикл выведет два элемента и затем завершится с сообщением All Done!.
Когда использовать for и когда выбирать другие конструкции
Важно понимать, что for хорош для заранее известных списков либо когда легко сгенерировать последовательность. Если нужно ждать события, читать поток построчно или обрабатывать ввод по мере поступления, рассмотрите while read, until или обработку через mapfile/arrays.
Краткие указания:
- for — перебор статического списка, диапазона, массива или результата команды;
- while — удобен для чтения построчно (например, из файла или входного потока);
- for с подстановкой $(command) — перебор слов в выводе команды, но аккуратно с пробелами и разделителями.
Практические рекомендации и безопасность
- Всегда ставьте shebang #!/usr/bin/env bash или #!/usr/bin/bash в начале скрипта, чтобы указать интерпретатор.
- Обрабатывайте пробелы и специальные символы: используйте массивы или кавычки вокруг переменных.
- Для безопасной обработки имён файлов лучше использовать while IFS= read -r line; do … done < file.
- Проверяйте права на исполнение и запускайте скрипты в тестовом окружении перед использованием в production.
Мини-методология: от идеи до рабочего скрипта
- Чётко определите входные данные (список, файл, вывод команды).
- Напишите минимальный цикл for с echo для проверки итераций.
- Добавьте обработку ошибок и условия остановки (if, break).
- Замените echo на реальные команды, повторно протестируйте.
- Добавьте логирование и документируйте ожидания.
Чек-лист для роли: разработчик
- Есть shebang в начале файла
- Скрипт отмечен как исполняемый (chmod +x)
- Переменные окружены кавычками при использовании
- Протестировано на примерах с пробелами и спецсимволами
- Добавлены комментарии и инструкция по запуску
Чек-лист для роли: ревьюер
- Проверил обработку ошибок
- Убедился, что цикл не бесконечен
- Проверил поведение при пустом списке
- Убедился в отсутствии утечек информации
Карта решений (Mermaid)
flowchart TD
A[Есть заранее известный список?] -->|Да| B[Использовать for]
A -->|Нет| C[Есть поток/файл?]
C -->|Да| D[Использовать while read]
C -->|Нет| E[Использовать event-driven/иную логику]
B --> F{Нужны шаги?}
F -->|Да| G[Использовать {start..end..step}]
F -->|Нет| H[Перечислить значения или использовать массив]Критерии приёмки
- Скрипт выполняется без ошибок в целевой среде (bash версии >= 4 для расширенных возможностей массивов и некоторых синтаксических конструкций).
- Поведение при пустом входе документировано и соответствует требованиям (например, ничего не печатать или выдавать предупреждение).
- Тесты покрывают минимум: один элемент, несколько элементов, элементы с пробелами, и случай с break/continue.
Отладка и тесты
Тестовые случаи:
- Пустой список — ожидаемый результат: нет итераций.
- Одна итерация — вывод одной строки.
- Много итераций — скрипт не должен зависать.
- Элемент с пробелами — корректная обработка кавычками.
- Условие break — прерывание цикла в нужный момент.
Простейший способ отладки: добавить set -x в начало скрипта для трассировки выполнения.
Модели зрелости использования циклов
- Уровень 1 — одинарные ad-hoc скрипты с простыми for по перечислению.
- Уровень 2 — скрипты с диапазонами, шагами и базовой обработкой ошибок.
- Уровень 3 — использование массивов, безопасная обработка ввода, тесты и документация.
Краткий словарь терминов (1 строка)
- for — цикл перебора значений; in — задаёт список; do/done — начало/конец блока; break — досрочное завершение; continue — переход к следующей итерации.
Примеры альтернатив и когда for не подходит
- Если нужно читать файл построчно с сохранением пробелов — предпочтителен while IFS= read -r.
- Для сложной обработки с параллельными задачами — рассмотрите xargs -P или GNU parallel.
- Для работы с большими массивами данных, требующих фильтрации — используйте awk или sed в конвейерной обработке.
Краткое резюме
Цикл for — удобный и гибкий инструмент в Bash. Он прост в синтаксисе и подходит для большинства задач по итерации фиксированных списков и диапазонов. При работе с динамическими потоками или файлами стоит помнить об ограничениях и выбирать другие конструкции, если требуется безопасно сохранять пробелы или обрабатывать большие потоки данных. Следуйте чек-листам и критериям приёмки, чтобы обеспечить надёжность и предсказуемость скриптов.
Важное: тестируйте скрипты в контрольной среде и внимательно обрабатывайте значения с пробелами и спецсимволами.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone