Циклы — одна из фундаментальных концепций языков программирования. Циклы удобны, когда вы хотите выполнить серию команд несколько раз, пока не будет выполнено определенное условие.
В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач. В Bash сценариях доступны такие циклы как for, while, и until.
В этом руководстве рассматриваются основы циклов while в Bash. Мы также покажем вам, как использовать операторы break и continue чтобы изменить ход цикла.
while цикл
В while цикл используется для выполняет заданный набор команд неизвестное число раз до тех пор , как данное условие принимает значение истинно.
Цикл while Bash имеет следующую форму:
while [CONDITION]
do
[COMMANDS]
done
Оператор while начинается с ключевого слова while , за которым следует условное выражение.
Условие оценивается перед выполнением команд. Если условие истинно, команды выполняются. В противном случае, если условие оценивается как ложное, цикл завершается, и управление программой будет передано следующей команде.
В приведенном ниже примере на каждой итерации текущее значение переменной i печатается и увеличивается на единицу.
i=0
while [ $i -le 2 ]
do
echo Number: $i
((i++))
done
Цикл вторника повторяется до тех пор, пока i меньше или равно двум. Он выдаст следующий результат:
Number: 0
Number: 1
Number: 2
Бесконечный цикл while
Бесконечный цикл — это цикл, который повторяется бесконечно и никогда не завершается. Если условие всегда истинно, вы получаете бесконечный цикл.
В следующем примере мы используем встроенную команду : для создания бесконечного цикла. : всегда возвращает истину. Вы также можете использовать true встроенный или любой другой оператор, который всегда возвращает true.
while :
do
echo "Press <CTRL+C> to exit."
sleep 1
done
В while цикл выше будет работать до бесконечности. Вы можете прервать цикл, нажав CTRL+C
Вот однострочный эквивалент:
while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done
Прочитать файл построчно
Одним из наиболее распространенных использований в while петли , чтобы прочитать файл, поток данных или переменной построчно.
Вот пример, который считывает файл /etc/passwd построчно и печатает каждую строку:
file=/etc/passwd
while read -r line; do
echo $line
done < "$file"
Вместо того , чтобы контролировать while цикл с условием, что мы используем перенаправления ввода ( < "$file" ) , чтобы передать файл на read команды, которая контролирует цикл. В while цикл будет выполняться до тех пор , последняя строка не читается.
При чтении файла построчно всегда используйте read с опцией -r чтобы обратная косая черта не использовалась как escape-символ.
По умолчанию команда read обрезает начальные / конечные пробельные символы (пробелы и табуляции). Используйте параметр IFS= перед read чтобы предотвратить такое поведение:
file=/etc/passwd
while IFS= read -r line; do
echo $line
done < "$file"
break и continue
Операторы break и continue могут использоваться для управления выполнением цикла while.
break
Оператор break завершает текущий цикл и передает управление программой команде, которая следует за завершенным циклом. Обычно он используется для завершения цикла при выполнении определенного условия.
В следующем примере выполнение цикла будет прервано, когда текущий повторяемый элемент станет равным 2 .
i=0
while [ $i -lt 5 ]
do
echo "Number: $i"
((i++))
if [[ "$i" == '2' ]]; then
break
fi
done
echo 'All Done!'
Number: 0
Number: 1
All Done!
continue
Оператор continue завершает текущую итерацию цикла и передает управление программой следующей итерации цикла.
В нижеследующем ниже, как только текущий повторяемый элемент равен 2 оператор continue заставит выполнение вернуться к началу цикла и продолжить следующую итерацию.
i=0
while [ $i -lt 5 ]
do
((i++))
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
echo 'All Done!'
Number: 1
Number: 3
Number: 4
Number: 5
All Done!
Выводы
В while цикл многократно выполняет заданный набор команд до тех пор , как условие истинно.
Добавить комментарий