Введение
Циклы — одна из фундаментальных концепций языков программирования. Циклы полезны, когда вы хотите многократно выполнять серию команд, пока не будет выполнено определенное условие.
В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач. В сценариях Bash есть 3 основные конструкции цикла: цикл for, цикл while и цикл until.
В этом руководстве объясняются основы цикла «до» в Bash.
Баш до цикла
Цикл until используется для выполнения заданного набора команд до тех пор, пока данное условие оценивается как ложное.
Цикл Bash until принимает следующий вид:
until [CONDITION]
do
[COMMANDS]
done
Условие оценивается перед выполнением команд. Если условие ложно, команды выполняются. В противном случае, если условие оценивается как истинное, цикл будет прерван, а управление программой будет передано следующей команде.
В следующем примере на каждой итерации цикл печатает текущее значение переменной counter
и увеличивает переменную на единицу.
#!/bin/bash
counter=0
until [ $counter -gt 5 ]
do
echo Counter: $counter
((counter++))
done
Цикл прокручивается до тех пор, пока переменная counter
не станет больше четырех. Скрипт выдаст следующий вывод:
Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5
Примеры
Следующий сценарий может быть полезен, если у хоста git есть время простоя, и вместо того, чтобы вручную набирать git pull
несколько раз, пока хост не будет подключен к сети, вы можете запустить скрипт один раз. Он будет пытаться извлечь репозиторий до тех пор, пока он не будет успешно извлечен.
#!/bin/bash
until git pull &> /dev/null
do
echo "Waiting for the git host..."
sleep 1
done
echo -e "\nThe git repository is pulled."
Сценарий напечатает «Ожидание хоста git…» и заснет на одну секунду, пока хост git не окажется в сети. После извлечения репозитория будет напечатано «Репозиторий git извлечен».
Waiting for the git host...
Waiting for the git host...
Waiting for the git host...
The git repository is pulled.
Вывод
Циклы while
и until
похожи друг на друга, с основным отличием в том, что цикл while
повторяется до тех пор, пока условие не станет true
, а цикл while повторяется until
тех пор, пока условие не станет false
.