Цикл 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. Если это так, он выполняет тело цикла, увеличивает значение counter с помощью $((...)) для выполнения арифметических операций и проверяет условие снова.
Как только count достигает 6, условие становится ложным, и цикл останавливается.
Циклы while идеально подходят, когда вы заранее не знаете, сколько итераций вам потребуется. Например, вы можете продолжать запрашивать input, пока пользователь не введёт "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для сравнения «меньше или равно». Не забудь увеличивать значение counter внутри цикла с помощью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