Управление ходом исполнения — один из ключевых моментов структурной организации сценариев на языке командной оболочки. Циклы и преходы являются теми инструментальными средствами, которые обеспечивают управление порядком исполнения команд.
10.1. Циклы
Цикл — это блок команд, который исполняется многократно до тех пор, пока не будет выполнено условие выхода из цикла.
циклы for
Это одна из основных разновидностей циклов. И она значительно отличается от аналога в языке C.
На каждом проходе цикла, переменная-аргумент цикла arg последовательно, одно за другим, принимает значения из списка list.
Элементы списка могут включать в себя шаблонные символы.
Есл ключевое слово do находится в одной строке со словом for, то после списка аргументов (перед do) необходимо ставить точку с запятой.
Пример 10-1. Простой цикл for
Каждый из элементов [списка] может содержать несколько аргументов. Это бывает полезным при обработке групп параметров. В этом случае, для принудительного разбора каждого из аргументов в списке, необходимо использовать инструкцию set (см. Пример 11-13).
Пример 10-2. Цикл for с двумя параметрами в каждом из элементов списка
В качестве списка, в цикле for, можно использовать переменную.
Пример 10-3. Fileinfo: обработка списка файлов, находящегося в переменной
В [списке] цикла for могут быть использованы имена файлов, которые в свою очередь могут содержать символы-шаблоны.
Пример 10-4. Обработка списка файлов в цикле for
Если [список] в цикле for не задан, то в качестве оного используется переменная $@ — список аргументов командной строки. Оень остроумно эта особенность проиллюстрирована в Пример A-18.
Пример 10-5. Цикл for без списка аргументов
При создании списка аргументов, в цикле for допускается пользоваться подстановкой команд. См. Пример 12-39, Пример 10-10 и Пример 12-33.
Пример 10-6. Создание списка аргументов в цикле for с помощью операции подстановки команд
Более сложный пример использования подстановки команд при создании списка аргументов цикла.
Пример 10-7. grep для бинарных файлов
Еще один пример.
Пример 10-8. Список всех пользователей системы
И заключительный пример использования подстановки команд при создании [списка].
Пример 10-9. Проверка авторства всех бинарных файлов в текущем каталоге
Результат работы цикла for может передаваться другим командам по конвейеру.
Пример 10-10. Список символических ссылок в каталоге
Вывод цикла может быть перенаправлен со stdout в файл, ниже приводится немного модифицированный вариант предыдущего примера, демонстрирующий эту возможность.
Пример 10-11. Список символических ссылок в каталоге, сохраняемый в файле
Оператор цикла for имеет и альтернативный синтаксис записи — очень похожий на синтаксис оператора for в языке C. Для этого используются двойные круглые скобки.
Пример 10-12. C-подобный синтаксис оператора цикла for
А сейчас пример сценария, который может найти «реальное» применение.
Пример 10-13. Работа с командой efax в пакетном режиме
Оператор while проверяет условие перед началом каждой итерации и если условие истинно (если код возврата равен 0 ), то управление передается в тело цикла. В отличие от циклов for, циклы while используются в тех случаях, когда количество итераций заранее не известно.
Как и в случае с циклами for/in , при размещении ключевого слова do в одной строке с объявлением цикла, необходимо вставлять символ «;» перед do.
Обратите внимание: в отдельных случаях, таких как использование конструкции getopts совместно с оператором while, синтаксис несколько отличается от приводимого здесь.
Пример 10-14. Простой цикл while
Пример 10-15. Другой пример цикла while
Оператор while может иметь несколько условий. Но только последнее из них определяет возможность продолжения цикла. В этом случае синтаксис оператора цикла должен быть несколько иным.
Пример 10-16. Цикл while с несколькими условиями
Как и в случае с for, цикл while может быть записан в C-подобной нотации, с использованием двойных круглых скобок (см. так же Пример 9-28).
Пример 10-17. C-подобный синтаксис оформления цикла while
Стандартное устройство ввода stdin, для цикла while, можно перенаправить на файл с помощью команды перенаправления в конце цикла.
Оператор цикла until проверяет условие в начале каждой итерации, но в отличие от while итерация возможна только в том случае, если условие ложно.
Обратите внимание: оператор until проверяет условие завершения цикла ПЕРЕД очередной итерацией, а не после, как это принято в некоторых языках программирования.
Как и в случае с циклами for/in , при размещении ключевого слова do в одной строке с объявлением цикла, необходимо вставлять символ «;» перед do.
Источник
Bash цикл While
Bash while Loop
Это руководство охватывает основы while циклов в Bash. Мы также покажем вам , как использовать break и continue заявление , чтобы изменить поток цикла.
Циклы являются одним из фундаментальных понятий языков программирования. Циклы удобны, когда вы хотите выполнить серию команд несколько раз, пока не будет выполнено определенное условие.
В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач. В скриптах Bash есть три основных конструкции циклов: for , while и until .
Цикл While
while Цикл используется для выполняет заданный набор команд неизвестное число раз до тех пор , как данное условие принимает значение истинно.
Цикл Bash while принимает следующую форму:
Обявление начинается с while ключевого слова, за которым следует условное выражение.
Условие оценивается перед выполнением команд. Если условие оценивается как true, команды выполняются. В противном случае, если условие оценивается как ложное, цикл прерывается, и управление программой передается следующей команде.
В приведенном ниже примере на каждой итерации текущее значение переменной i печатается и увеличивается на единицу.
Бесконечный while цикл
Бесконечный цикл — это цикл, который повторяется бесконечно и никогда не заканчивается. Если условие всегда оценивается как истинное, вы получаете бесконечный цикл.
В следующем примере мы используем встроенную команду : для создания бесконечного цикла. : всегда возвращает истину. Вы также можете использовать true встроенный или любой другой оператор, который всегда возвращает true.
while Цикл выше , будет работать бесконечно. Вы можете завершить цикл, нажав CTRL+C .
Вот однострочный эквивалент:
Читать файл построчно
Одним из наиболее распространенных применений while цикла является построчное чтение файла, потока данных или переменной.
Вот пример, который читает /etc/passwd файл построчно и печатает каждую строку:
Вместо того, чтобы управлять while циклом с условием, мы используем входную redirection ( ), чтобы передать файл read команде, которая управляет циклом. while Цикл будет выполняться до тех пор , последняя строка не читается.
При чтении файла построчно, всегда используйте read с -r возможностью предотвращения обратного слэша выступать в качестве экранирующего символа.
По умолчанию read команда обрезает начальные / конечные пробельные символы (пробелы и символы табуляции). Используйте IFS= опцию прежде, read чтобы предотвратить это поведение:
Операторы break и continue
break И continue заявления могут быть использованы для управления выполнением цикла While.
break
break Оператор завершает текущий цикл и передает управление программой к команде, следующей за прерванный цикл. Обычно используется для завершения цикла при выполнении определенного условия.
В следующем примере выполнение цикла будет прервано, как только текущий повторяющийся элемент будет равен 2
continue
continue Оператор завершает текущую итерацию цикла и передает управление программой к следующей итерации цикла.
В следующем ниже, после того , как текущий итерированным элемент равен 2 по continue исполнению заявления заставит вернуться к началу цикла и продолжить со следующей итерации.
Вывод
while Цикл многократно выполняет заданный набор команд до тех пор , как условие истинно.
Источник
Цикл while в Bash
Циклы — одна из фундаментальных концепций языков программирования. Циклы удобны, когда вы хотите выполнить серию команд несколько раз, пока не будет выполнено определенное условие.
В языках сценариев, таких как Bash, циклы полезны для автоматизации повторяющихся задач. В Bash сценариях доступны такие циклы как for, while, и until.
В этом руководстве рассматриваются основы циклов while в Bash. Мы также покажем вам, как использовать операторы break и continue чтобы изменить ход цикла.
while цикл
В while цикл используется для выполняет заданный набор команд неизвестное число раз до тех пор , как данное условие принимает значение истинно.
Цикл while Bash имеет следующую форму:
Оператор while начинается с ключевого слова while , за которым следует условное выражение.
Условие оценивается перед выполнением команд. Если условие истинно, команды выполняются. В противном случае, если условие оценивается как ложное, цикл завершается, и управление программой будет передано следующей команде.
В приведенном ниже примере на каждой итерации текущее значение переменной i печатается и увеличивается на единицу.
Цикл вторника повторяется до тех пор, пока i меньше или равно двум. Он выдаст следующий результат:
Бесконечный цикл while
Бесконечный цикл — это цикл, который повторяется бесконечно и никогда не завершается. Если условие всегда истинно, вы получаете бесконечный цикл.
В следующем примере мы используем встроенную команду : для создания бесконечного цикла. : всегда возвращает истину. Вы также можете использовать true встроенный или любой другой оператор, который всегда возвращает true.
В while цикл выше будет работать до бесконечности. Вы можете прервать цикл, нажав CTRL+C
Вот однострочный эквивалент:
Прочитать файл построчно
Одним из наиболее распространенных использований в while петли , чтобы прочитать файл, поток данных или переменной построчно.
Вот пример, который считывает файл /etc/passwd построчно и печатает каждую строку:
Вместо того , чтобы контролировать while цикл с условием, что мы используем перенаправления ввода ( ) , чтобы передать файл на read команды, которая контролирует цикл. В while цикл будет выполняться до тех пор , последняя строка не читается.
При чтении файла построчно всегда используйте read с опцией -r чтобы обратная косая черта не использовалась как escape-символ.
По умолчанию команда read обрезает начальные / конечные пробельные символы (пробелы и табуляции). Используйте параметр IFS= перед read чтобы предотвратить такое поведение:
break и continue
Операторы break и continue могут использоваться для управления выполнением цикла while.
break
Оператор break завершает текущий цикл и передает управление программой команде, которая следует за завершенным циклом. Обычно он используется для завершения цикла при выполнении определенного условия.
В следующем примере выполнение цикла будет прервано, когда текущий повторяемый элемент станет равным 2 .
continue
Оператор continue завершает текущую итерацию цикла и передает управление программой следующей итерации цикла.
В нижеследующем ниже, как только текущий повторяемый элемент равен 2 оператор continue заставит выполнение вернуться к началу цикла и продолжить следующую итерацию.
Выводы
В while цикл многократно выполняет заданный набор команд до тех пор , как условие истинно.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Bash While Loop Examples
H ow do I use bash while loop to repeat specific task under Linux / UNIX operating system? How do I set infinite loops using while statement? Can you provide me the while loop examples?
The bash while loop is a control flow statement that allows code or commands to be executed repeatedly based on a given condition. For example, run echo command 5 times or read text file line by line or evaluate the options passed on the command line for a script.
Tutorial details
Difficulty level
Easy
Root privileges
No
Requirements
BASH or KSH on Linux/Unix-like systems
Est. reading time
1 minute
bash while loop syntax
The syntax is as follows:
command1 to command3 will be executed repeatedly till condition is true. The argument for a while loop can be any boolean expression. Infinite loops occur when the conditional never evaluates to false. Here is the while loop one-liner syntax:
For example following while loop will print welcome 5 times on screen:
And here is above code as a bash while one liner: x=1; while [ $x -le 5 ]; do echo «Welcome $x times» $(( x++ )); done Here is a sample shell code to calculate factorial using while loop:
To run just type: $ chmod +x script.sh $ ./script.sh 5
The while loop in action on my Ubuntu Linux desktop
You can easily evaluate the options passed on the command line for a script using while loop:
Redirecting user input for a while Loop
How about reading user input from a file? Say you have a file as follows with various IP address: cat bad-guys.ips.txt List of crackers IP address:
Here is a bash while loop that read those IP address separated by Internal Field Separator ( $IFS ) to an octothorpe ( # ):
Click to enlarge
How do I use while as infinite loops ?
Infinite for while can be created with empty expressions, such as:
No ads and tracking
In-depth guides for developers and sysadmins at Opensourceflare✨
Join my Patreon to support independent content creators and start reading latest guides:
How to set up Redis sentinel cluster on Ubuntu or Debian Linux
How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
Conditional while loop exit with break statement
You can do early exit with the break statement inside the whil loop. You can exit from within a WHILE using break. General break statement inside the while loop is as follows:
In this example, the break statement will skip the while loop when user enters -1, otherwise it will keep adding two numbers:
Early continuation with the continue statement
To resume the next iteration of the enclosing WHILE loop use the continue statement as follows:
Recommended readings
We learned that bash while loop executes while a condition is true. See the following resource
See all sample shell script in our bash shell directory
Bash loops from our Linux shell scripting tutorial guide
man bash
help while
help <
help break
help continue
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Nice to see the Bash shell, How do you break out of a loop
is there a break statement, or do you have to use a goto?
Yes there is a break and continue statement. man bash has more information.
Very useful examples, thank you!
Thank you so much . you define very nicly all exampls regarding while loop secquence statement….
could u please give the shell script for printing the fibonocci series and to know if the number is palindrome and also if it an armstrong number
Does anyone know how to write a script that echoes three different arguments three times using a loop
shift command to traverse through arguments
does anyone can give an example of a while loop within a loop?
The script “test” should set variable “filter_mode” to FALSE if there are no lines in the file “switches” and to TRUE if there exists at least one line in the file “switches”. Why do I get “filter_mode : FALSE” eventually?
$ cat test And my script:
Run as: gg@GeorgSimon:
$ cat switches switch gg@GeorgSimon:
$ sh test switch : switch filter_mode : TRUE filter_mode : FALSE
how to write a program in bash for displaying table using until statement? table should be like 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 plz reply soon….thanks