Цикл while
Часть раздела Основы путешествия по Terminal на Coddy. Урок 72 из 82.
Цикл for отлично подходит, когда вы точно знаете, какие элементы нужно перебрать. Но что, если вы хотите продолжать цикл, пока не изменится определённое условие? Вот здесь и пригодится цикл while.
Цикл while продолжает выполняться, пока его условие остается истинным. Вот базовая структура:
#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "Count: $count"
count=$((count + 1))
doneЭтот скрипт выводит числа от 1 до 5.
Цикл проверяет, меньше ли count или равно 5. Если да, выполняет тело, увеличивает счётчик с помощью $((...)) для арифметики и проверяет снова.
Как только count достигает 6, условие становится ложным и цикл останавливается.
Циклы while идеальны, когда вы заранее не знаете, сколько итераций потребуется. Например, вы можете продолжать запрашивать ввод, пока пользователь не введет "quit":
#!/bin/bash
input=""
while [ "$input" != "quit" ]; do
read -p "Enter command (quit to exit): " input
echo "You entered: $input"
doneБудьте осторожны с циклами while. Если условие никогда не становится ложным, ваш цикл выполняется бесконечно.
Всегда убедитесь, что внутри цикла что-то в конечном итоге изменяет условие, например, увеличение счётчика или обновление переменной на основе ввода пользователя.
Задание
ЛегкоСоздайте shell-скрипт с именем counter.sh, который использует цикл while для вывода чисел от 1 до 4.
Ваш скрипт должен:
- Начинаться со строки shebang (
#!/bin/bash) - Создать переменную с именем
numс начальным значением1 - Использовать цикл while, который продолжается, пока
numменьше или равно 4 - Внутри цикла вывести текущее число в формате:
Number: [num] - Увеличить
numна 1 после каждой итерации с помощью$((num + 1))
Сделайте скрипт исполняемым и запустите его. Ваш вывод должен быть:
Number: 1
Number: 2
Number: 3
Number: 4Подсказка: Используйте
-leдля сравнения «меньше или равно». Не забудьте увеличить счетчик внутри цикла с помощьюnum=$((num + 1)), чтобы избежать бесконечного цикла. Завершите цикл while словомdone.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Каталоги
Создать каталогСкопировать каталогПереместить и переименовать каталогУдалить каталогИтог - Операции с каталогами7Содержимое файлов
Head и TailПодсчёт словКоманда sortКоманда uniqОсновы grepGrep с флагамиПовторение - Текстовый детектив10Проект анализатора логов
Обзор проектаПросмотр файла лога13Основы скриптинга оболочки
Что такое скрипт оболочкиСоздание и запуск скриптаПеременные в скриптахПользовательский ввод в скриптахОператор ifЦикл forЦикл whileИтог - Угадай число2Навигация
Вывод текущей рабочей директорииСписок файловСмена директорииАбсолютные и относительные путиДомашняя и корневая директорииИтог - Найди свой путь8Перенаправление
Стандартный выводПерезапись в файлДописывание в файлСтандартный вводСтандартная ошибкаПовторение - Сборщик логов11Права доступа
Понимание прав доступаЧтение прав доступаChmod с числамиChmod с символамиВладение файламиПовторение - Заблокируйте доступ14Проект скрипта резервного копирования
Обзор проектаПолучение пути к источнику3Файлы
Создать файлПрочитать файлСкопировать файлПереместить и переименовать файлУдалить файлПовторение - Операции с файлами6Символы подстановки и шаблоны
Звёздный символ подстановкиВопросительный символ подстановкиСкобочные символы подстановкиКомбинирование символов подстановкиПовторение - выборочные операции9Каналы
Что такое каналЦепочка двух командЦепочка нескольких командКанал с grepИтог - Конвейер данныхПотренируйтесь самостоятельно: Песочница Terminal