bash скрипты для начинающих — урок №6: Цикл while.

Предыдущий урок: 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 помогает контролировать  ход исполнения скрипта. Мы научились делать как циклы, зависящие от условия, так и бесконечные циклы.

Следующий урок: в процессе