Предыдущий урок: bash скрипты для начинающих — урок №5: Коды выхода.
Bash скрипт — это последовательность команд, но что если мы хотим повторить команду несколько раз, а еще, контролировать число повторений в зависимости от обстоятельств. Тут нам не обойтись без циклов. Сегодня мы рассмотрим цикл while.
Зачем нужен цикл while?
Повторение операций: Когда нужно выполнять одну и ту же задачу несколько раз, например, читать строки из файла или проверять состояние системы.
Обработка данных до достижения условия: Например, продолжать запрашивать ввод пользователя, пока он не введёт правильные данные.
Автоматизация бесконечных или долгих процессов: Для запуска постоянно работающих процессов или создания серверных циклов, которые работают, пока не произойдет определённое событие.
Мониторинг состояния системы: Например, проверять наличие новых писем, файлов или ошибок, и реагировать на изменения в реальном времени.
Создание интерактивных сценариев: Можно делать меню или интерактивные подсказки, повторяющиеся до тех пор, пока пользователь не выберет выход.
Цикл while
Создадим новый файл скрипта и сделаем его исполняемым:
[root@waky bash_practice]# touch script_6.sh
[root@waky bash_practice]# chmod +x script_6.sh
[root@waky bash_practice]#
Шаг 1: Создаем итерированный цикл
Внесем в файл script_6.sh следующий код:
#!/bin/bash
i=0
while [ $i -lt 10 ]
do
echo "Step: $i"
i=$((i+1))
done
Запустим скрипт:
[root@waky bash_practice]# ./script_6.sh
Step: 0
Step: 1
Step: 2
Step: 3
Step: 4
Step: 5
Step: 6
Step: 7
Step: 8
Step: 9
[root@waky bash_practice]#
Действия внутри цикла выполнены 10 раз. Они повторялись каждый раз, пока переменная $i была меньше 10. На каждой итерации значение переменной увеличивалось на 1.
Условие цикла не обязательно должно быть числовым. Можно использовать другие условия, например наличие файла. Перепишем скрипт:
#!/bin/bash
while [ -f not_exist.txt ]
do
echo "file exists"
sleep 1
done
echo "file not exists"
Напомню, что файл not_exist.txt у нас остался с прошлого урока. Запустим наш скрипт, он будет исполняться пока существует файл:
[root@waky bash_practice]# ./script_6.sh
file exists
file exists
file exists
file exists
^C
[root@waky bash_practice]#
Нажмите Ctrl+C чтобы прервать исполнение. Удалим файл и повторим попытку:
[root@waky bash_practice]# rm -f not_exist.txt
[root@waky bash_practice]# ./script_6.sh
file not exists
[root@waky bash_practice]#
На этот раз никаких долгих циклов, файла нет — условие не выполняется, ход скрипта двигается дальше.
Шаг 2: Создаем бесконечный цикл
В прошлом примере, когда файл присутствовал, у нас получился практически бесконечный цикл. Чтобы цикл был полностью бесконечный нужно использовать условие, которое всегда верно.
Перепишем наш скрипт:
#!/bin/bash
while true
do
echo "Time now: $(date)"
sleep 1
done
Можно придумать разные условия, которые всегда правда, но нет ничего вернее true. Запустим скрипт:
[root@waky bash_practice]# ./script_6.sh
Time now: Tue Dec 23 05:17:29 AM MSK 2025
Time now: Tue Dec 23 05:17:30 AM MSK 2025
Time now: Tue Dec 23 05:17:31 AM MSK 2025
Time now: Tue Dec 23 05:17:32 AM MSK 2025
Time now: Tue Dec 23 05:17:33 AM MSK 2025
Time now: Tue Dec 23 05:17:34 AM MSK 2025
^C
[root@waky bash_practice]#
Он будет выводить время, ждать 1 секунду и повторять цикл. Это будет продолжаться, пока исполнение скрипта не будет прервано.
Итоги:
Сегодня мы рассмотрели один из циклов в bash. while помогает контролировать ход исполнения скрипта. Мы научились делать как циклы, зависящие от условия, так и бесконечные циклы.
Следующий урок: в процессе