Break command in linux

break (1p) — Linux Manuals

This manual page is part of the POSIX Programmer’s Manual. The Linux implementation of this interface may differ (consult the corresponding Linux manual page for details of Linux behavior), or the interface may not be implemented on Linux.

NAME

break — exit from for, while, or until loop

SYNOPSIS

break [n]

DESCRIPTION

The break utility shall exit from the smallest enclosing for, while, or until loop, if any; or from the nth enclosing loop if n is specified. The value of n is an unsigned decimal integer greater than or equal to 1. The default shall be equivalent to n=1. If n is greater than the number of enclosing loops, the outermost enclosing loop shall be exited. Execution shall continue with the command immediately following the loop.

OPTIONS

OPERANDS

STDIN

INPUT FILES

ENVIRONMENT VARIABLES

ASYNCHRONOUS EVENTS

STDOUT

STDERR

The standard error shall be used only for diagnostic messages.

OUTPUT FILES

EXTENDED DESCRIPTION

EXIT STATUS

0 Successful completion. >0 The n value was not an unsigned decimal integer greater than or equal to 1.

CONSEQUENCES OF ERRORS

The following sections are informative.

APPLICATION USAGE

EXAMPLES

for i in * do if test -d "$i" then break fi done 

RATIONALE

In early proposals, consideration was given to expanding the syntax of break and continue to refer to a label associated with the appropriate loop as a preferable alternative to the n method. However, this volume of IEEE Std 1003.1-2001 does reserve the name space of command names ending with a colon. It is anticipated that a future implementation could take advantage of this and provide something like:

outofloop: for i in a b c d e do for j in 0 1 2 3 4 5 6 7 8 9 do if test -r "$$" then break outofloop fi done done 

and that this might be standardized after implementation experience is achieved.

FUTURE DIRECTIONS

Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology — Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

SEE ALSO

Special Built-In Utilities

  • break (1) — bash built-in commands, see bash(1)
  • break (2) — unimplemented system calls
  • break (n) — Abort looping command
Читайте также:  Linux перемещение файлов папок

Источник

Операторы 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 break and continue functions

Computer Hope

On Unix-like operating systems, break and continue are built-in shell functions which escape from or advance within a while, for, foreach or until loop.

This page covers the bash versions of break and continue.

Syntax

Options

Examples

In the following shell script, the break command exits from a while loop when the variable a has a value of 5 or greater:

#!/bin/sh a=0 while [ $a -lt 10 ] do echo $a if [ $a -eq 5 ] then break fi a=$(( $a + 1 )) done

. and produces the following output:

This next example uses the form break n to break from a nested loop.

#!/bin/sh for var1 in 1 2 3 do for var2 in 0 1 2 3 do if [ $var1 -eq 2 -a $var2 -eq 1 ] then break 2 else echo "$var1 $var2" fi done done

In the above script, the outer loop sets var1 to 1, then the inner loop sets var2 to the values 0, 1, 2, and 3, respectively. Then the outermost loop sets var1 to 2 and the inner loop sets var2 to the values of 0 and 1 — at which point the conditions are met to execute break 2, which terminates both loops. It produces the following output:

csh — The C shell command interpreter.
exit — Exit the command shell.
for — Execute a set of commands in a repeating loop.
foreach — Execute a set of commands once for each of a given set of input items.
ksh — The Korn shell command interpreter.
sh — The Bourne shell command interpreter.
until — Execute a set of commands until a certain condition is true.
while — Execute a set of actions while a certain condition is true.

Источник

Break command in linux

Для управления ходом выполнения цикла служат команды 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 и т.п. — являются зарезервированными словами.

Источник

Оцените статью
Adblock
detector