10 прикладів циклу Bash For із поясненнями

Цикл For є фундаментальною конструкцією в будь-якій мові програмування. Він надає можливість програмам ітерувати через набір елементів задану кількість разів.

Наприклад, якщо вам потрібно пройтися по списку або масиву, що містить “n” елементів, цикл for буде ідеальним рішенням. Розгляньмо простий приклад:

1 Фіолетовий
2 Індиго
3 Синій
4 Зелений

Для виконання операцій або повторення дій над елементами цієї таблиці нам необхідно скористатися циклом For.

Цикл For у Bash

У сценаріях bash, синтаксис циклу For виглядає так:

#!/bin/bash

for VAR in 1 2 3 4 5.....N
do
    ДІЯ 1
    ДІЯ 2
    .....
done

Цикл For у Bash є доволі простим. Рядок #!/bin/bash вказує, що це bash-скрипт. VAR – це тимчасова змінна для циклу. N – максимальна кількість ітерацій. Ключові слова do та done позначають початок і кінець циклу відповідно. Дії – це команди, що виконуються в кожній ітерації.

Цикл For в Bash можна використовувати з різними типами даних, такими як списки, рядки, цілі числа та масиви. У цій статті розглянемо декілька типових прикладів застосування циклу Bash For.

Ви можете запускати ці програми безпосередньо в командному рядку bash, або зберегти їх у файлі та запустити за допомогою команди bash filename.sh.

Зчитування статичного списку

Розглянемо наступний список: rainbowColorList = фіолетовий, індиго, синій, зелений, жовтий, помаранчевий, червоний.

Ми можемо вивести цей список рядків за допомогою циклу Bash For таким чином:

#!/bin/sh

# Оголошення списку
rainbowColorList=Violet,Indigo,Blue,Green,Yellow,Orange,Red

# Розділення за допомогою коми //,/
for colors in ${rainbowColorList//,/ }
do
    echo $colors
done

Результатом буде виведення кожного елемента списку на новому рядку.

#Вивід

Violet
Indigo
Blue
Green
Yellow
Orange
Red

Зчитування масиву

Синтаксис для оголошення масиву відрізняється. Для кожного елемента (рядка) використовуйте круглі дужки.

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for colors in "${rainbowArray[@]}"; do
    echo "Мені подобається $colors"
done

Символ @ використовується для обходу кожного елемента масиву.

#Вивід

Мені подобається Violet
Мені подобається Indigo
Мені подобається Blue
Мені подобається Green
Мені подобається Yellow
Мені подобається Orange
Мені подобається Red

Ми також можемо використовувати цикл For для виведення індексів та елементів масиву.

#Виведення з індексами

rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red")

for i in "${!rainbowArray[@]}";
do
  echo "Колір з індексом " $i " : " "${rainbowArray[$i]}"
  i=$((i+1));
done
#Вивід

Колір з індексом 0 : Violet
Колір з індексом 1 : Indigo
Колір з індексом 2 : Blue
Колір з індексом 3 : Green
Колір з індексом 4 : Yellow
Колір з індексом 5 : Orange
Колір з індексом 6 : Red

Зверніть увагу, що ми використовуємо “!” у циклі, щоб отримати індекс елемента.

Ітерація по діапазону чисел

Цикл Bash For можна використовувати для ітерації по діапазону чисел.

#Ітерація по діапазону чисел

echo "Зворотній відлік починається..."

for N in {10..0}
do
   echo "$N"
done

Символи .. вказують на діапазон чисел.

#Вивід

10
9
8
7
6
5
4
3
2
1
0

Ми також можемо пропустити підрахунок чисел, вказавши крок.

У прикладі нижче ми пропускаємо підрахунок через 3.

#Ітерація з пропусками

echo "Зворотній відлік починається..."

for N in {30..0..3}
do
    echo "$N"
done

Програма починається з числа 30 і веде зворотній відлік до 0. Останній параметр в циклі for “3” визначає крок.

#Вивід

30
27
24
21
18
15
12
9
6
3
0

Рядки та символи

За допомогою циклу Bash For можна виконувати цікаві операції з рядками.

Наприклад, ми можемо прочитати кожен символ рядка, використовуючи оператор seq у циклі For:

#Читання символів рядка

myword="welcome"

for i in $(seq 1 ${#myword})
do
    echo "${myword:i-1:1}"
done

Зауважте, що seq має починатися з 1, щоб першим отримати перший символ.

#Вивід

w
e
l
c
o
m
e

Також ми можемо вивести рядки, розділені пробілом, один за одним:

#Читання кожного слова з речення

mysentence="Welcome to techukraine.net. One stop hub for all techies"

for word in $mysentence; do
    echo $word
done
#Вивід

Welcome
to
techukraine.net.
One
stop
hub
for
all
techies

Вирази

Як і в будь-якій іншій мові програмування, наприклад, Java, ми можемо вставляти вирази в цикл Bash For.

for (( var=10; var>=0; var-- ))
do
    echo "Зворотній відлік...$var"
done
#Вивід

Зворотній відлік...10
Зворотній відлік...9
Зворотній відлік...8
Зворотній відлік...7
Зворотній відлік...6
Зворотній відлік...5
Зворотній відлік...4
Зворотній відлік...3
Зворотній відлік...2
Зворотній відлік...1
Зворотній відлік...0

Читання аргументів командного рядка

Для читання аргументів командного рядка ми використовуємо команду read. У наступному прикладі ми отримаємо кілька чисел від користувача та виведемо їх суму за допомогою циклу Bash For. Змінна total використовується для зберігання проміжних та остаточних сум чисел.

read -a array -p "Введіть числа, які потрібно додати:"

total=0

for i in ${array[@]}; do
    let total+=$i
done

echo "Сума чисел: $total"

Результат:

#Вивід

Введіть числа, які потрібно додати: 3 4 66
Сума чисел: 73

Пошук парних та непарних чисел

Для знаходження парних та непарних чисел від 1 до 10 (або будь-якого числа N) необхідно використовувати умову if разом із циклом Bash for Loop. Щоб визначити парне число, ми ділимо число на 2, і якщо остача дорівнює 0, класифікуємо його як парне, інакше – як непарне.

#оголошуємо списки для парних і непарних чисел

evennum=""
oddnum=""

for (( i=1; i<=10; i++ ))
do
    remainder=$(( $i % 2 ))
    if [ $remainder -eq 0 ]; then
        evennum="$evennum $i "
    else
        oddnum="$oddnum $i "
    fi
done

echo "Парні числа: "$evennum
echo "Непарні числа: "$oddnum

Зауважте, що у наведеному вище прикладі ми задали діапазон 10. Ми можемо змінити це число, щоб отримати парні та непарні числа в будь-якому діапазоні. Ви також можете спробувати прочитати число від користувача за допомогою команди read, як ми навчилися в попередньому розділі.

#Вивід

Парні числа: 2 4 6 8 10
Непарні числа: 1 3 5 7 9

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

Нескінченний цикл – це цикл, який не зупиняється, і програму потрібно примусово зупинити за допомогою Ctrl+C. Ми можемо легко створити нескінченний цикл, використовуючи ;; в циклі for:

for (( ; ; ))
do
    echo "Ласкаво просимо на techukraine.net"
done
#Вивід

Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
Ласкаво просимо на techukraine.net
^C
$

Інструкція Break

Інструкції break використовуються для виходу з циклу, коли виконується певна умова if.

for color in Violet Indigo Blue Green Yellow Orange Red
do
    if [[ "$color" == 'Green' ]]; then
        break
    fi
    echo "Шукаю Зелений, поточний колір: $color"
done

echo "Я знайшов свій колір $color"

У цьому прикладі ми намагаємося знайти зелений колір. Цикл For проходить через кожен колір, і коли зелений колір знайдено, програма виходить з циклу за допомогою інструкції break.

#Вивід

Шукаю Зелений, поточний колір: Violet
Шукаю Зелений, поточний колір: Indigo
Шукаю Зелений, поточний колір: Blue
Я знайшов свій колір Green

Інструкція Continue

Інструкція continue використовується для пропуску поточної ітерації циклу та переходу до наступної, за певних умов. Наприклад, якщо ми не хочемо виводити колір “Зелений” з попередньої програми, ми можемо поставити continue, і відобразяться всі кольори, крім зеленого.

for color in Violet Indigo Blue Green Yellow Orange Red
do
    if [[ "$color" == 'Green' ]]; then
        continue
    fi
    echo "$color"
done
#Вивід

Violet
Indigo
Blue
Yellow
Orange
Red

Заключні слова

Ми розглянули найбільш поширені варіанти використання циклу Bash For Loop з рядками, цілими числами, масивами та списками. Якщо ви вивчаєте Linux, але маєте комп’ютер з Windows 10, ви можете використовувати функцію WSL і встановити Linux на свій комп’ютер з Windows.

Потім ви можете використовувати термінал Linux так само, як CMD.

Далі ви можете переглянути, як запускати bash-скрипти за допомогою Python?