Linux script for break

Операторы break и continue в Bash

Циклы позволяют выполнять одну или несколько команд несколько раз, пока не будет выполнено определенное условие. Однако иногда вам может потребоваться изменить ход цикла и завершить цикл или только текущую итерацию.

В Bash операторы break и continue позволяют контролировать выполнение цикла.

Оператор break в Bash

Оператор break завершает текущий цикл и передает управление программой команде, которая следует за завершенным циклом. Он используется для выхода из цикла for , while , until или select . s Синтаксис оператора break имеет следующий вид:

[n] — необязательный аргумент и должен быть больше или равен 1. Если задано [n] , завершается n-ый включающий цикл. break 1 эквивалентен break .

Чтобы лучше понять, как использовать оператор break , давайте взглянем на следующие примеры.

В приведенном ниже сценарии, исполнение в while цикла будет прерван после того , как текущая итерация элемент равен 2 :

i=0 while [[ $i -lt 5 ]] do echo "Number: $i" ((i++)) if [[ $i -eq 2 ]]; then break fi done echo 'All Done!' 
Number: 0 Number: 1 All Done! 

Вот пример использования оператора break внутри вложенных циклов for .

Если аргумент [n] не указан, break завершает самый внутренний охватывающий цикл. Внешние циклы не завершаются:

for i in 1..3>; do for j in 1..3>; do if [[ $j -eq 2 ]]; then break fi echo "j: $j" done echo "i: $i" done echo 'All Done!' 
j: 1 i: 1 j: 1 i: 2 j: 1 i: 3 All Done! 

Если вы хотите выйти из внешнего цикла, используйте break 2 . Аргумент 2 сообщает break чтобы завершить второй охватывающий цикл:

for i in 1..3>; do for j in 1..3>; do if [[ $j -eq 2 ]]; then break 2 fi echo "j: $j" done echo "i: $i" done echo 'All Done!' 

Оператор continue в Bash

Оператор continue пропускает оставшиеся команды внутри тела охватывающего цикла для текущей итерации и передает управление программой следующей итерации цикла.

Синтаксис оператора continue следующий:

Аргумент [n] является необязательным и может быть больше или равен 1. Когда задано [n] , возобновляется n-й включающий цикл. continue 1 эквивалентно 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! 

Следующий скрипт печатает числа от 1 до 50 , которые делятся на 9 .

Если число не делится на 9 , оператор continue пропускает команду echo и передает управление следующей итерации цикла.

for i in 1..50>; do if [[ $(( $i % 9 )) -ne 0 ]]; then continue fi echo "Divisible by 9: $i" done 
Divisible by 9: 9 Divisible by 9: 18 Divisible by 9: 27 Divisible by 9: 36 Divisible by 9: 45 

Выводы

Циклы — одна из фундаментальных концепций языков программирования. В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач.

Оператор break используется для выхода из текущего цикла. Оператор continue используется для выхода из текущей итерации цикла и начала следующей итерации.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Linux script for break

Для управления ходом выполнения цикла служат команды break и continue [1] и точно соответствуют своим аналогам в других языках программирования. Команда break прерывает исполнение цикла, в то время как continue передает управление в начало цикло, минуя все последующие команды в теле цикла.

Пример 10-20. Команды break и continue в цикле

#!/bin/bash LIMIT=19 # Верхний предел echo echo "Печать чисел от 1 до 20 (исключая 3 и 11)." a=0 while [ $a -le "$LIMIT" ] do a=$(($a+1)) if [ "$a" -eq 3 ] || [ "$a" -eq 11 ] # Исключить 3 и 11 then continue # Переход в начало цикла. fi echo -n "$a " done # Упражнение: # Почему число 20 тоже выводится? echo; echo echo Печать чисел от 1 до 20, но взгляните, что происходит после вывода числа 2 ################################################################## # Тот же цикл, только 'continue' заменено на 'break'. a=0 while [ "$a" -le "$LIMIT" ] do a=$(($a+1)) if [ "$a" -gt 2 ] then break # Завершение работы цикла. fi echo -n "$a " done echo; echo; echo exit 0

Команде break может быть передан необязательный параметр. Команда break без параметра прерывает тот цикл, в который она вставлена, а break N прерывает цикл, стоящий на N уровней выше (причем 1-й уровень — это уровень текущего цикла, прим. перев.).

Пример 10-21. Прерывание многоуровневых циклов

#!/bin/bash # break-levels.sh: Прерывание циклов. # "break N" прерывает исполнение цикла, стоящего на N уровней выше текущего. for outerloop in 1 2 3 4 5 do echo -n "Группа $outerloop: " for innerloop in 1 2 3 4 5 do echo -n "$innerloop " if [ "$innerloop" -eq 3 ] then break # Попробуйте "break 2", # тогда будут прерываться как вложенный, так и внешний циклы fi done echo done echo exit 0

Команда continue, как и команда break, может иметь необязательный параметр. В простейшем случае, команда continue передает управление в начало текущего цикла, а команда continue N прерывает исполнение текущего цикла и передает управление в начало внешнего цикла, отстоящего от текущего на N уровней (причем 1-й уровень — это уровень текущего цикла, прим. перев.).

Пример 10-22. Передача управление в начало внешнего цикла

#!/bin/bash # Команда "continue N" передает управление в начало внешнего цикла, отстоящего от текущего на N уровней. for outer in I II III IV V # внешний цикл do echo; echo -n "Группа $outer: " for inner in 1 2 3 4 5 6 7 8 9 10 # вложенный цикл do if [ "$inner" -eq 7 ] then continue 2 # Передача управления в начало цикла 2-го уровня. # попробуйте убрать параметр 2 команды "continue" fi echo -n "$inner " # 8 9 10 никогда не будут напечатаны. done done echo; echo # Упражнение: # Подумайте, где реально можно использовать "continue N" в сценариях. exit 0

Пример 10-23. Живой пример использования «continue N»

# Albert Reiner привел пример использования "continue N": # --------------------------------------------------------- # Допустим, у меня есть большое количество задач, обрабатывающие некоторые данные, #+ которые хранятся в некоторых файлах, с именами, задаваемыми по шаблону, #+ в заданном каталоге. #+ Есть несколько машин, которым открыт доступ к этому каталогу #+ и я хочу распределить обработку информации между машинами. #+ тогда я обычно для каждой машины пишу нечто подобное: while true do for n in .iso.* do [ "$n" = ".iso.opts" ] && continue beta=$ [ -r .Iso.$beta ] && continue [ -r .lock.$beta ] && sleep 10 && continue lockfile -r0 .lock.$beta || continue echo -n "$beta: " `date` run-isotherm $beta date ls -alF .Iso.$beta [ -r .Iso.$beta ] && rm -f .lock.$beta continue 2 done break done # Конкретная реализация цикла, особенно sleep N, зависит от конкретных применений, #+ но в общем случае он строится по такой схеме: while true do for job in do && continue continue 2 done break # Или что нибудь подобное `sleep 600', чтобы избежать завершения. done # Этот сценарий завершит работу после того как все данные будут обработаны #+ (включая данные, которые поступили во время обработки). Использование #+ соответствующих lock-файлоа позволяет вести обработку на нескольких машинах #+ одновременно, не производя дублирующих вычислений [которые, в моем случае, #+ выполняются в течении нескольких часов, так что для меня это очень важно]. #+ Кроме того, поскольку поиск необработанных файлов всегда начинается с #+ самого начала, можно задавать приоритеты в именах файлов. Конечно, можно #+ обойтись и без `continue 2', но тогда придется ввести дополнительную #+ проверку -- действительно ли был обработан тот или иной файл #+ (чтобы перейти к поиску следующего необработанного файла).

Конструкция continue N довольно сложна в понимании и применении, поэтому, вероятно лучше будет постараться избегать ее использования.

Примечания

Эти команды являются встроенными командами языка сценариев командной оболочки (shell), в то время как while, case и т.п. — являются зарезервированными словами.

Источник

Bash break: How to Exit From a Loop

In Bash scripting, a break statement helps provide control inside loop statements. Instead of waiting until the end condition, a break statement helps exit from a loop before the end condition happens.

The control loop statements ( break and continue) combine logically with conditional statements such as if elif else to create special situations inside loops.

This tutorial teaches you how to use the break statement efficiently in Bash script loops.

Bash break: How to Exit From a Loop

  • A machine running macOS or Linux.
  • Bash scripting basics (such as writing and running a script).
  • A text editor to write the Bash script examples, such as nano.

Bash break Statement

The break statement ends the current loop iteration and exits from the loop. When combined with a condition, break helps provide a method to exit the loop before the end case happens.

Bash break loop state diagram

The Bash break statements always apply to loops.

The integer value is optional, and it is 1 by default. The number defines the depth of the break for nested loops. Therefore, to break from a nested for loop, use break 2 .

Bash break Examples

The examples below demonstrate how to exit from different loop types using the break statement. The examples include:

Each Bash script example below comes with an explanation.

Breaking from a while Loop

Use the break statement to exit a while loop when a particular condition realizes. The following script uses a break inside a while loop:

#!/bin/bash i=0 while [[ $i -lt 11 ]] do if [[ "$i" == '2' ]] then echo "Number $i!" break fi echo $i ((i++)) done echo "Done!"

while_break.sh script code

Each line in the script does the following:

  • Line 3 defines and sets the variable i to 0 .
  • Line 5 starts the while loop. The end condition is when the variable is less than eleven ( $i -lt 11 ).
  • Line 7 performs a check using an if statement. When the variable equals two ( «$i» == 2 ), the program exits the while loop using the Bash break statement on line 10. In that case, the code jumps to line 16. If the variable is a different number, the script continues as expected on line 12.

Execute the script to see the results.

while_break.sh terminal output

The program lists numbers up to 2 and exits the script.

Using break Inside for Loops

A for loop increments a variable automatically. To add a conditional statement and exit a for loop early, use a break statement. The following code shows an example of using a break within a for loop:

#!/bin/bash for i in do if [[ $i == '2' ]] then echo "Number $i!" break fi echo "$i" done echo "Done!"

for_break.sh script code

When the integer value equals two ( $i == ‘2’ ), the program prints a message and exits the for loop thanks to the break statement.

for_break.sh terminal output

As a result, running the script ends the program when the variable i reaches two and jumps to the last line of code.

Breaking from an until Loop

A Bash until loop is one of the three fundamental loop constructs. Add a break statement to control the program flow and exit the loop under a different condition.

Below is an example program:

#!/bin/bash i=0 until [[ $i -gt 10 ]] do if [[ $i -eq 2 ]] then echo "Number $i!" break fi echo $i ((i++)) done echo "Done!"

until_break.sh script code

Although the until loop contains an end condition ( $i -gt 10 ), the loop body contains another condition ( $i -eq 2 ). Since the second condition happens before the first, the program enters the if statement’s body, which contains a Bash break statement to exit from the loop.

until_break.sh terminal output

Running the script demonstrates that the program ends when the variable i reaches the value 2 .

Using break Inside a select Loop

The select command creates menus and behaves like an infinite loop, even though it’s not one of the primary loop constructs. To exit the select statement elegantly, make a case for which the program ends and use break to leave the loop.

The code below demonstrates a textual number guessing game using a select statement:

#!/bin/bash/ PS3="Guess my favorite number: " select i in do echo "Selected number: $i" if [[ $REPLY -eq 2 ]] then echo "Correct! $i is my favorite. Thanks for playing!" break fi echo "Not my favorite. Try again!" done

select_break.sh script code

The code does the following:

  • Line 3 displays the instructional message. The select statement prints this message after listing all the options and after each incorrect guess.
  • Line 5 starts the select statement and defines the options as numbers 1 to 10 .
  • Line 8 checks if the selected number equals 2 , which is the correct guess. If the check passes, the Bash break statement helps exit the loop and ends the game.

Run the script to play the number guessing game.

select_break.sh terminal output

Input different values to see the results.

To develop the script further, try adding an elif statement to check for out of range inputs or change it to a case statement to consider various input situations.

After going through the examples in this tutorial, you know how to use the break statement to control a loop flow.

Next, learn how to use Bash comments to document the scripts from this tutorial.

Источник

Читайте также:  Linux create file cmd
Оцените статью
Adblock
detector