
Циклы — одна из основополагающих концепций языков программирования. Циклы удобны, когда нужно выполнить последовательность команд несколько раз, пока не будет выполнено определённое условие.
В скриптовых языках, таких как Bash, циклы полезны для автоматизации повторяющихся задач. В скриптах Bash существует три основных конструкции циклов: for , while и until .
В этом руководстве рассматриваются основы циклов while в Bash. Мы также покажем, как использовать операторы break и continue для изменения хода выполнения цикла.
Bash while Цикл
Цикл while используется для выполнения заданного набора команд неизвестное количество раз до тех пор, пока заданное условие остается истинным.
Цикл Bash while имеет следующий вид:
while [ CONDITION ] do [ COMMANDS ] done
Оператор while начинается с ключевого слова while , за которым следует условное выражение.
Условие проверяется перед выполнением команд. Если условие истинно, команды выполняются. В противном случае, если условие ложно, цикл завершается, и управление программой передаётся следующей команде.
В приведенном ниже примере на каждой итерации текущее значение переменной i выводится и увеличивается на единицу.
i = 0 while [ $i -le 2 ] do echo Number: $i (( i++ )) done
Цикл Tue повторяется до тех пор, пока i меньше или равно двум. Результат будет следующим:
Number: 0 Number: 1 Number: 2
Бесконечный цикл while
Бесконечный цикл — это цикл, который повторяется бесконечно и никогда не завершается. Если условие всегда выполняется, цикл бесконечен.
В следующем примере мы используем встроенную команду : для создания бесконечного цикла. : всегда возвращает true. Вы также можете использовать встроенную команду true или любой другой оператор, который всегда возвращает true.
while : do echo "Press to exit." sleep 1 done
Цикл while , представленный выше, будет выполняться бесконечно. Вы можете прервать его, нажав CTRL+C .
Вот однострочный эквивалент:
while : ; do echo 'Press 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 , чтобы предотвратить использование обратной косой черты в качестве экранирующего символа.
По умолчанию команда 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 многократно выполняет заданный набор команд до тех пор, пока условие остается истинным.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства