Bash (Bourne Again Shell) — це командний рядок і мова сценаріїв оболонки в операційних системах GNU/Linux. Це оболонка за замовчуванням для більшості дистрибутивів Linux.
Як і більшість мов сценаріїв, Bash надає синтаксис циклу для повторення подібних завдань кілька разів. У цій статті ми дізнаємося, як користуватися для
цикл у Bash.
Вступ
Типовий сценарій Bash містить серію команд, які виконуються одна за одною. Змінні можна використовувати для зберігання рядків, значень цілочисельного індексу, результатів команди тощо. Цикли потрібні, коли користувач хоче виконати певну команду кілька разів. Це особливо корисно, коли вихід однієї команди має форму списку, а для кожного результату в списку має бути запущена друга команда.
Загальний синтаксис
Загальний синтаксис для для
цикл у Bash:
для in do ... ... зроблено
Ось, є змінною Bash, яка має бути дійсним ім'ям змінної оболонки Linux, тобто ім'я містить комбінацію літер (az, AZ), цифр (0-9) і підкреслення ( _ ) і має починатися з літери або підкреслення.
The це або користувацький діапазон цілих індексів, які будуть зациклені, або користувацький список цілих чисел або рядків. Він також може містити іншу команду Linux, однак вихід такої команди повинен бути розділений пробілами або символами нового рядка, тобто бути проаналізований Bash у список (список у Bash — це в основному набір значень, розділених пробілом або новим рядком ).
Будь-яка команда (команди), що має бути виконана, повинна бути розміщена всередині зробити..зроблено
блокувати.
Давайте подивимося на кілька простих прикладів.
Цикл на діапазон значень Integer: Наступний код створює каталоги з іменами dir1, dir2, dir3 до dir10.
for i в {1..10} зробити mkdir dir$i done
Цикл у списку фіксованих значень: Наступний код друкує кожен рядок або ціле число з заданого фіксованого списку.
for i in Hello 1 2 3 Bye! do echo $i done
Цикл на виводі команди: Наступний код зациклюється на виведенні ls
і друкує назву кожного файлу у заданому форматі.
for i в `ls` do echo "Ім'я файлу - $i" виконано
Синтаксис на основі виразів
Синтаксис на основі виразів, схожий на мову програмування C, також можливий у Bash:
for ((Вираз 1; Вираз 2; Вираз 3)) do ... ... done
тут, Вираз 1
є ініціалізацією змінної(й) індексу. Вираз 2
це умова, коли цикл повинен бути вийшов; ця умова перевіряється на кожній ітерації. Вираз 3
визначає збільшення/зменшення/модифікацію значення змінної(-й) індексу
Наступний приклад просто друкує значення від 0 до 4:
for ((i=0;i<5;i++)) do echo $i done
Наступний приклад створює нескінченний цикл, оскільки вирази не вказуються:
for (( ; ; )) do echo "Натисніть Ctrl-C, щоб зупинити" виконано
Перерви і продовжуй
Оператор розриву для умовного виходу
Ми також можемо використовувати умовний оператор якщо
всередині петлі. The якщо
оператор може використовуватися з a перерву
оператор, для умовного виходу з циклу.
for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi зроблено
Цикл вище надрукуватиме числа від 0 до 4. Потім, коли значення i дорівнює 5, він вирветься з циклу. Це особливо корисно, коли потрібно вийти з циклу, коли команда дає певний вихід. Наприклад, наступний цикл розривається, якщо і коли він знаходить порожній файл.
для файлу в `ls` do flen=`wc -c $file` якщо [[ "$flen" = "0 $file" ]] then echo "$file порожній" break else echo $flen fi done
Команда туалет -ц
друкує кількість рядків у файлі . Він друкує його у форматі
, наприклад,
10 test.txt
. Ми вириваємось із циклу, коли кількість рядків дорівнює 0, тобто порожній файл.
Оператор Continue для умовного пропуску ітерації
Подібно до C та багатьох інших мов програмування, bash також має a продовжувати
оператор, щоб пропустити частину ітерації, що залишилася в циклі, якщо виконується певна умова.
for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then continue fi echo $i; зроблено
Цикл вище друкуватиме числа від 0 до 10, крім 5, тому що під час ітерації i=5
є оператор continue, який пропускає решту коду в циклі на початку з ітерацією i=6
.
У наступному прикладі ми друкуємо кількість рядків у файлі, і конкретна ітерація буде продовжувати
якщо це каталог, а не файл.
для файлу в `ls` зробити, якщо [[ -d $file ]], потім продовжити fi wc -c "$file" виконано
[[ -d $file ]]
перевіряє, чи є файл каталогом. Якщо так, то ми переходимо до наступного файлу, тобто до наступної ітерації. Якщо це не каталог, ми друкуємо кількість рядків у файлі за допомогою туалет
команду, як було показано раніше.
Використання циклів: скрипти та командний рядок
Синтаксис циклу можна використовувати безпосередньо в оболонці Bash або з файлу сценарію оболонки. Одного разу а для
Синтаксис циклу вводиться в оболонку, оболонка продовжує запит, щоб дозволити користувачеві продовжити виконання команд, які будуть зациклені.
Або користувач може зберегти це у файлі сценарію та виконати файл сценарію.
The #!/bin/bash
на початку вказує інтерпретатор, який буде використовуватися під час виконання файлу. Хоча Bash є найбільш часто використовуваною оболонкою в наш час, деякі користувачі віддають перевагу оболонкам, як zsh
, який слід вказати замість bash на початку цього файлу.
Щоб надати дозволи на виконання для цього файлу запустіть:
chmod +x test.sh
нарешті, щоб виконати файл, запустити:
./test.sh
Висновок
The для
цикл у Bash є досить простою функцією, але вона використовується майже в усіх видах складних сценаріїв. Вивчення цього має довгий шлях, незалежно від того, чи є ви звичайним або досвідченим користувачем Linux, або починаєте вивчати автоматизацію для завдань системного адміністрування та DevOps.