logo

Сценарії Bash – цикл While

А цикл while це оператор, який повторює блок коду, доки вказану умову не буде оцінено як false. Ми можемо використовувати цей оператор або цикл у нашій програмі, коли не знаємо, скільки разів умова буде оцінюватися як істина, перш ніж оцінюватися як хибність.

Зміст

Синтаксис циклу while у сценаріях BASH

while [ condition ]; do  # statements  # commands done>

Якщо умова виконується, то команди всередині блоку while виконуються та повторюються знову після перевірки умови. Крім того, якщо умова хибна, оператори всередині блоку while пропускаються, а оператори після блоку while виконуються.



Приклад циклічного використання оператора while у Linux

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim while.sh>

#!/usr/bin/bash

а=7
while [ $a -gt 4 ];
робити
echo $a
((a–))
зроблено
echo Поза циклом

Пояснення:

  • #!/usr/bin/bash> : Цей рядок називається shebang і вказує шлях до інтерпретатора, який слід використовувати для виконання сценарію. У цьому випадку вказується, що слід використовувати оболонку Bash.
  • a=7> : ініціалізує змінну з іменемa>зі значенням 7.
  • while [ $a -gt 4 ];> : Запускає цикл while, який триває доти, доки не встановлено значенняa>більше 4.
  • do> : Позначає початок блоку коду, який буде виконано в циклі while.
  • echo $a> : друкує поточне значення змінноїa>до консолі.
  • ((a--))> : зменшує значенняa>на 1. Це скорочений спосіб написанняa=$((a - 1))>.
  • done> : Позначає кінець блоку коду для циклу while.
  • echo 'Out of the loop'> : Виводить із циклу на консоль після завершення циклу while.
Цикл while в Linux

Цикл while в Linux

Підсумовуючи, цей скрипт ініціалізує змінну ` a`> зі значенням 7, потім вводить цикл while, який триває до тих пір, поки ` a`> більше 4. У циклі друкується поточне значення ` a`> і зменшує його на 1 у кожній ітерації. Один раз ` a`> стає 4 або менше, цикл виходить, і сценарій виводить Out of the loop на консоль.

Читання файлу за допомогою циклу while

Ми можемо прочитати файл за допомогою циклу while у BASH. Розбираючи певні параметри умови циклу while, ми можемо перебирати файл рядок за рядком або іншими групами, наприклад символами чи словами.

програма на java

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim while.sh>

#!/usr/bin/bash

файл=temp.txt
під час читання -r рядок;
робити
echo $line
виконано <$файл

Пояснення:

  • #!/usr/bin/bash> : цей рядок shebang вказує, що для інтерпретації сценарію слід використовувати оболонку Bash.
  • file=temp.txt> : призначає рядок temp.txt зміннійfile>, що представляє назву файлу для читання.
  • while read -r line;> : Ініціює цикл while, який читає кожен рядок із зазначеного файлу.
  • do> : Позначає початок блоку коду, який буде виконано в циклі while.
  • echo $line> : друкує вміст змінноїline>, який представляє поточний рядок, який зчитується з файлу на консоль.
  • done> : Позначає кінець блоку коду для циклу while.
  • <'$file'> : перенаправляє вхідні дані циклу while із указаного файлу, у цьому випадку temp.txt.

Таким чином, цей скрипт читає кожен рядок із файлу temp.txt і друкує його на консолі, доки у файлі не залишиться рядків. The-r>варіант зread>Команда використовується для того, щоб зворотні косі риски у вхідних даних розглядалися як буквальні символи.

читати файл за допомогою оператора while у Linux

читати файл за допомогою оператора while у Linux

Ми використовуємо команду read, щоб фактично отримати рядки або символи з файлу. Команда читання передається з аргументом -r, який ігнорує екранування символів, якщо з'являється, і, отже, її аналізують як її. Ми читаємо рядок із файлу, згаданого після оператора done. Команда read зчитує рядок зі згаданого файлу, а цикли while завершуються, коли прочитано останній рядок із файлу (не залишилося жодного рядка для читання).

Ось як ми можемо прочитати вміст файлу за допомогою циклу while у BASH.

Нескінченний цикл while

Щоб створити нескінченний цикл за допомогою оператора циклу while. Нам не потрібно встановлювати жодних умов у циклі while, отже, цикл повторюється нескінченно. Нижче наведено приклад нескінченного циклу while:

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim while.sh>

#!/usr/bin/bash
поки:
робити
echo Нескінченний цикл
# Ми можемо натиснути Ctrl + C, щоб вийти зі сценарію
зроблено

Пояснення:

  • #!/usr/bin/bash> : Рядок shebang вказує, що для інтерпретації сценарію слід використовувати оболонку Bash.
  • while :> : Ініціює нескінченний цикл. The:>(двокрапка) — це вбудована команда оболонки, яка завжди повертає значення true, фактично створюючи нескінченний цикл.
  • do> : Позначає початок блоку коду, який буде виконано в нескінченному циклі.
  • echo 'An Infinite loop'> : друкує рядок An Infinite loop на консолі під час кожної ітерації циклу.
  • # We can press Ctrl + C to exit the script> : це коментар, який вказує на те, що ви можете перервати сценарій, натиснувши Ctrl + C у терміналі. Ctrl + C — це поширений спосіб переривання та завершення запущених сценаріїв у терміналі.
  • done> : Позначає кінець блоку коду для нескінченного циклу.

Таким чином, цей сценарій створює нескінченний цикл, який безперервно відтворює повідомлення An Infinite loop на консоль. Цикл можна перервати та вийти зі сценарію, натиснувши Ctrl + C у терміналі.

Нескінченний цикл із використанням оператора While в Linux

Нескінченний цикл із використанням оператора While в Linux

Таким чином, цикл while у сценарії буде повторюватися протягом нескінченного часу. Ми можемо вручну розірвати цикл або сценарій за допомогою CTRL + C.

Цикл while для повторення фіксованої кількості разів

Ми можемо використовувати цикл while для повторення фіксованої кількості разів, ми можемо встановити умову як -le або менше, ніж дорівнює числу, і цикл повторюватиметься, доки ітератор не стане меншим або дорівнюватиме числу, указаному в стан. Крім того, нам потрібно збільшити ітератор вручну, щоб ітератор циклу працював, інакше цикл триватиме вічно.

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim while.sh>

#!/usr/bin/bash

i=1

# число 4 може бути обмеженням

# ітерація циклу

while [ $i -le 4 ];
робити
echo $i
((i++))
зроблено

новий рядок у python

Пояснення:

  • #!/usr/bin/bash> : Рядок shebang вказує, що для інтерпретації сценарію слід використовувати оболонку Bash.
  • i=1> : ініціалізує змінну з іменемi>зі значенням 1.
  • while [ $i -le 4 ];> : Ініціює цикл while, який триває доти, доки не встановлено значенняi>менше або дорівнює 4.
  • do> : Позначає початок блоку коду, який буде виконано в циклі while.
  • echo $i> : друкує поточне значення змінноїi>до консолі.
  • ((i++))> : збільшує значенняi>на 1. Це скорочений спосіб написанняi=$((i + 1))>.
  • done> : Позначає кінець блоку коду для циклу while.
цикл while в Linux

цикл while в Linux

У наведеному вище прикладі ми бачимо, що цикл повторюється певну кількість разів. Оскільки ми ініціалізували лічильник на 1, і умовою є повторення циклу, доки ітератор не стане меншим або рівним числу в цьому випадку 4. Таким чином, ми можемо змінити число в умові відповідно до нашої вимоги.

Прочитайте аргумент командного рядка з параметрами getopts

Ми можемо використовувати параметри get ops, щоб прочитати вхідні дані з командного рядка, і якщо є кілька аргументів, ми можемо перевірити їх і проаналізувати один за одним за допомогою циклу while. getopts — це інструмент для отримання введених даних користувача з командного рядка. Ми можемо мати кілька параметрів аналізу з командного рядка, а за допомогою getopts і циклів while ми можемо створити професійно виглядаючу програму введення користувача.

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim while.sh>

#!/bin/bash

while getopts n:a: OPT
робити
справа ${OPT} в
n) name=${OPTARG} ;;
a) вік=${OPTARG} ;;
*) echo Недійсний параметр
вихід 1 ;;
esac
зроблено
printf Мене звати $name і мені $age років

Пояснення:

  • #!/bin/bash> : Рядок shebang вказує, що для інтерпретації сценарію слід використовувати оболонку Bash.
  • while getopts n:a: OPT> : Ініціює цикл, який використовуєgetopts>для аналізу параметрів командного рядка. Зазначені параметри єn>іa>, після чого очікується сварка.
  • do> : Позначає початок блоку коду, який буде виконано в циклі.
  • case '${OPT}' in> : запускає оператор case, який оцінює значення опції, яку зустрічаєgetopts>.
  • n) name=${OPTARG};;> : Якщо варіант є-n>, присвоює значення відповідного аргументу зміннійname>.
  • a) age=${OPTARG};;> : Якщо варіант є-a>, присвоює значення відповідного аргументу зміннійage>.
  • *) echo 'Invalid option'> : якщо виявлено недійсний параметр, на консолі виводиться повідомлення про помилку.
  • exit 1;;> : вихід зі сценарію з ненульовим кодом стану, що вказує на помилку.
  • esac> : завершує інструкцію case.
  • done> : Позначає кінець блоку коду для циклу.
  • printf 'My name is $name and am $age years old '> : друкує форматоване повідомлення на консолі, використовуючи значення ` name`> і ` age`> отримані з параметрів командного рядка.
Цикл while в Linux

Цикл while в Linux

У цьому випадку у нас є два варіанти, а саме ім’я та вік, ви можете мати кілька варіантів. Нам потрібно вказати, який параметр ми будемо використовувати оператори switch case і з командного рядка за допомогою параметра -shorthand. У цьому випадку ми використали -n для імені і -а за віком . У нас також є перевірка регістру за замовчуванням або недійсний, щоб ми не аналізували неправильні аргументи. Ми можемо призначити значення опції за допомогою OPTARG змінна, яка аналізує значення, надане параметру.

Цикл while тут використовується для повторення, доки не буде жодних параметрів, переданих із командного рядка. Ми перевіряємо наявність опцій -n і -a та повторюємо, доки не буде натиснуто клавішу повернення каретки або введення, і більше не буде параметрів для аналізу.

Цикл while у стилі C

Ми можемо використовувати цикл while у стилі C у BASH, змінні потрібно оцінювати у стилі BASH, але загальний синтаксис виглядає як C. Ми можемо використовувати такі оператори, як ,<= і так далі в умові циклу while і, отже, називається як цикл while у стилі C.

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim c-style-while.sh>

#!/bin/bash
i=0
а ((i <12))
робити
echo $i
((i+=2))
зроблено

c-style-while

c-style-while

У цьому прикладі ми бачимо, що цикл while має умову з операторами, відмінними від bash, як-от -le, -ge тощо, замість цього ми використовуємо оператори в стилі C в умові. Решта циклу є основним циклом, як у BASH, змінна або ітератор i збільшується на два, як ми можемо бачити в останньому операторі тіла циклу. Таким чином, цикл повторюється 5 разів.

Цикл while для виконання операцій над файлом

Ми можемо виконувати операції над файлом, наприклад читати лише певну частину файлу. Якщо у нас є стовпці, відформатовані певним чином, ми можемо використовувати змінні, щоб призначити їх і надрукувати дані одного рядка.

Ось приклад імені файлу wh.txt

vim wh.txt>

ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim file-while.sh>

Видалено тип мови

Python general 1991

Javascript web 1995

Java mobile 1995

Rust embedded 2010

Перейти до версії 2007

як працює комп'ютер

ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim file-while.sh>

#!/bin/bash

під час читання a b c
робити
echo $b – $a
зроблено

Цикл while в Linux

Цикл while в Linux

У цьому прикладі ми маємо три рядки, ми зчитуємо вміст, призначаючи його змінним a, b і c, це може бути все, що завгодно, але не забудьте використовувати їх у тілі циклу. Ми можемо вибрати окремий стовпець, наприклад b і a, і надрукувати або виконати над ними будь-які операції. Це не буде відображено у файлі, оскільки це лише локальні змінні сценарію.

Запис у файл за допомогою циклу while

Ми можемо писати у файл за допомогою введення користувача в циклі while. Ми можемо використовувати цикл while для повторення, доки ми вручну не вийдемо з циклу за допомогою CTRL + D, зберігаючи зміни у файлі, або за допомогою CTRL + C, щоб уникнути запису у файл. Ми використовуємо команду read, щоб ввести текст із командного рядка та розібрати його у файл.

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim write-wh.sh>

#! /bin/bash

файл=wh.txt
echo Введіть вміст у файл $file
під час читання рядка
робити
echo $line>> $file
зроблено

цикл while в Linux

цикл while в Linux

Отже, з наведеного вище прикладу ми змогли ввести текст у файл за допомогою циклу while і команди read. Щоб вийти з циклу та зберегти зміни у файлі, ми використовуємо клавіші CTRL+D, а щоб вийти з циклу, не зберігаючи нічого у файл, ми можемо використовувати клавіші CTRL+C. Таким чином, ми вводимо текст із командного рядка в текстовий файл за допомогою команди read і циклу while.

Перервати та продовжити використання циклу while

Break і continue важливі в програмі, яка працює з операторами циклу, оскільки вони контролюють потік операторів циклу без будь-яких явних умов.

Інструкція Break у циклі While

Ми використовуємо оператори break, щоб вийти з циклу, не чекаючи, поки умова циклу while оціниться як false. Цей оператор можна використовувати в блоці циклу. Це можна використовувати для виходу з нескінченного циклу з програмною умовою всередині циклу і таким чином підтримувати контроль над циклом.

Наприклад, у нас є скрипт, який рахує від 1 і назавжди. Але ми можемо програмно вийти з циклу за допомогою оператора break всередині тіла циклу з умовою.

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim while.sh>

#!/usr/bin/bash

i=1
поки:
робити
echo $i
if [$i -eq 20]; потім
echo Це кінець циклу
перерва
бути
((i++))
зроблено

Інструкція Break while циклу в Linux

Інструкція Break while циклу в Linux

Зі сценарію та виконання ми бачимо, що ми змогли розірвати або вийти з нескінченного циклу за допомогою умовного оператора та оператора break. Таким чином, інструкція break використовується для отримання потоку керування програмою/скриптом із циклу while для виходу з циклу без оцінки умови циклу як false.

Оператор Continue у циклі While

Ми можемо використовувати оператор continue, щоб діяти протилежно оператору break. Він перейде до початку блоку циклу та повторить його знову. Це можна використовувати для пропуску певних команд для певних умов і, отже, дозволяє змінювати потік циклу.

Наприклад, якщо у нас є змінна, ініціалізована на 1, і ми хочемо відобразити лише числа, що діляться на п’ять, або за певним шаблоном після умови, ми можемо використовувати оператори continue, щоб зробити саме це. Це дозволяє повторювати цикл у потрібний спосіб.

Спочатку ми створюємо текстовий файл за допомогою текстового редактора в Linux, у цьому випадку ми використовуємо текстовий редактор `vim`.

vim while.sh>

#!/usr/bin/bash

i=1
while [ $i -lt 30 ];
робити
((i++))
if [[ $(( $i % 5 )) -ne 0 ]];
потім
продовжувати
бути
echo $i
зроблено

Оператор Continue у циклі While в Linux

Оператор Continue у циклі While в Linux

Як ми бачимо, оператор continue переходить до початку блоку та починає виконання команд, пропускаючи наступні команди всередині блоку. Цикл while виконує ітерацію лише для значення змінна i менше ніж 30, тому умова if перевіряє, чи є змінна i ділиться на 5, і якщо це не так, ми повторюємо ще раз, використовуючи continue і збільшуємо значення змінної i. The змінна i відтворюється, лише якщо воно ділиться на 5, тому умова if оцінюється як false, і ми не зустрічаємо оператор continue і перенос із звичайним потоком циклу. Це зроблено, щоб уникнути реєстрації кожного числа та друкувати лише ті числа, які не відповідають шаблону чи умові оператора if чи інших умовних операторів.

Часті запитання

1. Що таке ` while`> цикл у сценаріях Bash?

Аwhile>loop — це інструкція потоку керування в сценаріях Bash, яка дозволяє певному блоку коду виконуватися неодноразово, доки виконується задана умова. Цикл забезпечує спосіб автоматизації повторюваних завдань і є фундаментальною конструкцією в сценаріях і програмуванні.

список ініціалізації python

2. Як виглядає синтаксис ` while`> переглядати цикл у Bash?

Основний синтаксис awhile>цикл у Bash виглядає наступним чином:

поки [умова]
робити
# Код, який буде виконано, поки умова виконується
зроблено

` condition`> це перевірка, яка виконується перед кожною ітерацією циклу. Якщо умова виконується, код у циклі виконується. Якщо умова хибна, цикл завершується, і сценарій продовжує виконання наступної команди після ` done`> заява.

3. Яка роль ` (( ... ))`> побудувати в Bash while> петля?

` (( ... ))`> construct у Bash використовується для арифметичних операцій. У контексті ` while`> циклу, він часто використовується для оцінки арифметичних умов.

Наприклад: ` ((i <10))> `>перевіряє, чи змінна ` i`> менше 10. Це дозволяє використовувати арифметичні вирази безпосередньо в умові циклу, що робить його особливо корисним під час числових порівнянь.

4. Як створити нескінченний цикл за допомогою ` while`> в Bash?

Нескінченний цикл у Bash можна створити за допомогою умови, яка завжди оцінюється як true.

Наприклад:

поки правда
робити
# Код для нескінченного циклу
зроблено

Крім того, ви можете використовувати ненульову константу в умові, наприклад ` while [ 1 ]`> , щоб досягти такого ж результату. Нескінченні цикли корисні в ситуаціях, коли потрібне безперервне виконання, доки його не буде перервано вручну.

Висновок

У цій статті ми обговорили сценарій BASH циклу while, який виявився універсальним інструментом для багаторазового виконання блоку коду на основі заданої умови. Основний синтаксис передбачає визначення умови в квадратних дужках, що дозволяє гнучкі ітерації. У статті досліджуються різноманітні застосування циклів while, включаючи читання з файлів, створення нескінченних циклів, фіксовані ітерації, аналіз аргументів командного рядка та використання операторів break і continue. Від синтаксису в стилі C до інтерактивного запису файлів, кожен приклад демонструє адаптивність циклу для вирішення низки потреб сценаріїв. Цей вичерпний огляд підкреслює важливість циклу while у сценаріях BASH, забезпечуючи надійний механізм для контрольованого повторення та ефективного виконання коду.