Все буде Україна!

Що таке bash в Linux? Гайд по написанню bash-скриптів

  Юрій  | 

  Оновл. 22 Тра 2022  | 

 71

bash (скор. від «Bourne-Again shell») — це командна оболонка (або «інтерпретатор командного рядка»), яка використовується за замовчуванням в операційних системах на базі Unix та Linux, створена в 1989 році Брайаном Фоксом з метою вдосконалення командної оболонки sh.

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

Що таке термінал?

Термінал — це програма, яка використовується для взаємодії із шеллом. Це просто інтерфейс до шеллу та інших програм командного рядка, які працюють усередині нього. Ось так виглядає типовий термінал (Konsole) в Debian 11 (оточення робочого столу — KDE Plasma):

Типовий термінал в Linux

Кожен раз, коли ми відкриваємо вікно терміналу, ми бачимо запрошення шеллуім'я_користувача@ім'я_системи:~$. Символ $ означає, що ми працюємо під обліковим записом звичайного користувача, а символ ~ (тильда) означає, що в даний момент ми знаходимося в домашньому каталозі /home/<ім’я_користувача>.

Команди bash

Команда bash — це найменша одиниця коду, яку bash може виконати. За допомогою команд ми повідомляємо шеллу, що нам потрібно, щоб він зробив. bash зазвичай приймає від користувача одну команду та повертається до нього після того, як команда буде виконана. Щоб трохи освоїтися в bash, спробуємо виконати кілька простих команд.

Команда echo — повертає все, що ви вводите в командному рядку:

Приклад використання команди echo

Команда date — відображає поточну дату та час:

Приклад використання команди date

Команда pwd (скор. від «print working directory») — вказує на поточний робочий каталог, в якому команди шелла шукатимуть файли.

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

Приклад використання команди pwd

Команда ls (скор. від «lis) — відображає вміст каталогу. Зазвичай команда ls починає з перегляду домашнього каталогу. Це означає, що якщо ми просто введемо ls, то дана команда виведе вміст поточного каталогу, яким в нашому випадку є домашній каталог /home/diego:

Приклад використання команди ls

Команда cd (скор. від «change directory») — змінює поточну директорію на задану користувачем. Розглянемо декілька прикладів використання цієї команди:

   cd <директорія> — змінює поточну директорію на задану. Давайте спробуємо за допомогою команди ls перейти до кореневого каталогу / та ознайомимося з його вмістом. Зверніть увагу, що ми також можемо використовувати крапку з комою ; для запису двох команд в одному рядку.

Приклад об’єднання двох команд в одному рядку

   cd .. — повернутися в батьківський каталог.

   cd — повернутися в домашній каталог.

Команда mkdir (скор. від «make directory») створює новий каталог.

Команда mv (скор. від «mov) — переміщує один або кілька файлів/каталогів з одного місця до іншого (яке задане користувачем). Для цього потрібно вказати, що ми хочемо перемістити (тобто джерело), і куди ми хочемо перемістити (тобто пункт призначення).

Як приклад давайте створимо новий каталог Ravesli у домашній директорії і перемістимо в нього всі .txt-файли (ну як “всі”, у мене там тільки один файл — Адреса.txt) з /home/diego/Документи/ за допомогою двох вищенаведених команд:

Переміщення файлів за допомогою команди mv

Команда touch — створює нові порожні файли (а також змінює тимчасові мітки в існуючих файлах та каталогах). Ось як ми можемо створити порожній файл під назвою foo.txt у папці Ravesli з домашнього каталогу:

Створення файлу за допомогою команди touch

Команда rm (скор. від «remove») — видаляє файли/каталоги. За замовчуванням, команда rm НЕ видаляє каталоги, але якщо використовується як rm -r * всередині вказаного каталогу, то кожний підкаталог та файл всередині заданого каталогу — видаляються.

Давайте видалимо раніше створений файл foo.txt:

Видалення файлу за допомогою команди rm

Команда rmdir (скор. від «remove directory») — видаляє каталоги.

Давайте видалимо створений раніше каталог /home/diego/Ravesli:

Видалення каталогів за допомогою команди rmdir

Команда cat (скор. від «concatenate») — зчитує файл та виводить його вміст. Команда може працювати з декількома файлами, об’єднуючи їх вивід в єдиний потік (звідси і назва). У мене в домашньому каталозі є папка untitled з файлами С++/Qt-проекту, і нижче я використовую команду cat для перегляду вмісту файлу main.cpp з untitled:

Приклад використання команди cat

Щоб переглянути декілька файлів, вкажіть один за одним (через пробіл) імена потрібних файлів після команди cat, наприклад:

Перегляд декількох файлів за допомогою команди cat

Команда man (скор. від manual”) — відображає довідкові сторінки, які є посібником користувача, вбудованим за замовчуванням у деякі дистрибутиви Linux та більшість Unix-систем. Наприклад, команда man bash відобразить посібник користувача, а команда man ls відобразить довідку по команді ls.

Відображення довідкової інформації за допомогою команди man

Редактор nano

nano — це маленький, простий, консольний текстовий редактор *nix-подібних операційних систем, що вперше побачив світ у далекому 1999 році. Для запуску редактора достатньо ввести в терміналі лише одну команду — nano. Якщо ж потрібно відредагувати якийсь конкретний файл, застосовується команда nanо /<шлях_до_файлу/<ім'я_файлу>. Відмінною рисою даного редактора є можливість використання “гарячих клавіш”. Наприклад, для збереження поточного документа застосовується комбінація Ctrl+O, для виклику меню пошуку — Ctrl+W, для виходу з редактора — Ctrl+X, а для отримання всього списку доступних клавіш — Ctrl+G.

Гайд по написанню bash-скриптів

Наш шелл є не тільки проміжною ланкою між користувачем та системою, але ще й потужною мовою програмування. Програми, написані мовою шелла, називаються shell-скриптами (або shell-сценаріями) і мають відповідне розширення файлів .sh. Сама мова містить повний набір утиліт і команд, доступних в *nix-системах, а також цикли, умовні оператори, оголошення змінних тощо. Такі скрипти будуть дуже корисними там, де не потрібне використання повноцінних мов програмування, наприклад, в задачах адміністрування операційної системи.

Створення bash-скрипта

Щоб створити новий файл bash-скрипта, відкрийте текстовий файл у будь-якому редакторі і збережіть його з розширенням .sh. Всі подальші експерименти я проводитиму в Debian Linux із застосуванням текстового редактора nano.

Давайте створимо новий файл ravesli.sh:

diego@debian:~$ touch ravesli.sh
diego@debian:~$ ls -l
-rw-r--r-- 1 diego diego    0 мар  9 14:59  ravesli.sh
diego@debian:~$

Щоб виконати файл bash-скрипта, потрібно змінити права доступу до файлу і зробити його виконуваним. Права доступу, як ви знаєте з попередніх уроків, змінюються командою chmod +x <ім'я_файлу>:

diego@debian:~$ chmod +x ravesli.sh
diego@debian:~$ ls -l
итого 40
drwxr-xr-x 2 diego diego 4096 фев 27 00:23  build-untitled-Desktop-Debug
-rwxr-xr-x 1 diego diego    0 мар  9 14:59  ravesli.sh

Виконання bash-скрипта

Файл bash-скрипта може бути запущений двома способами:

   Спосіб №1: bash <ім'я_файлу>. Щоб виконати скрипт, просто напишіть в терміналі команду bash, а потіім (через пробіл) ім’я файлу та натисніть Enter.

   Спосіб №2: ./<ім'я_файлу>. Щоб виконати скрипт, введіть команду ./<ім'я_файлу> та натисність Enter.

Команда echo

Команда echo — це одна з фундаментальних команд bash-скриптів. Її основне призначення полягає у виведенні будь-якої інформації на екран. Давайте відкриємо за допомогою nano (або іншого текстового редактора) файл ravesli.sh і спробуємо застосувати команду echo для виводу певного тексту в терміналі.

Далі натискаємо Ctrl+O для збереження змін і Ctrl+X для виходу з nano.

Примітка: Кожен bash-скрипт завжди повинен починатися з рядка:

У цьому рядку після #! вказується шлях до командної оболонки bash. Якщо у вас bash знаходиться в іншому місці, то за допомогою команди whereis bash ви можете дізнатися, де саме, і вказати свій шлях.

Запустимо наш файл і побачимо:

diego@debian:~$ ./ravesli.sh
Привет, Ravesli !
Эта команда была выполнена с помощью bash-скрипта
diego@debian:~$

Комантарі

Коментарі — це важлива частина комп’ютерних програм. Ці рядки не виконуються, проте покращують читабельність коду і допомагають зрозуміти його призначення. У файлі bash-скрипта ми можемо додавати однорядкові та багаторядкові коментарі:

   однорядкові коментарі починаються з символу #;

   багаторядкові коментарі починаються з одинарної лапки ', а символ двокрапки : використовується для додання рядків в коментар.

Давайте розглянемо простий приклад застосування коментарів в bash-скриптах:

Результат:

Оголошення та використання змінних

Ви, напевно, пам’ятаєте, що змінні потрібні для зберігання даних. Вони є важливим аспектом будь-якої мови програмування. Використовувати змінні в bash дуже просто — вони оголошуються шляхом написання свого імені. Надалі при зверненні до змінної потрібно просто вказати символ $ разом з нею.

Давайте оголосимо та застосуємо змінну в нашому файлі bash-скрипта:

Результат:

Умовний оператор if

Умовні оператори bash використовуються для прийняття рішень. В умовних операторах обчислюється конкретна умова. Якщо умова істинна (true), виконується перший блок коду. В протилежному випадку (false) виконується другий блок коду.

Ми можемо обчислити одну або кілька умов усередині блоку if за допомогою операторів OR (||) та AND (&&). У bash блок if починається з ключового слова if і закінчується ключовим словом fi. Якщо задана умова помилкова, то виконується блок else.

Давайте подивимося, як виконуються умовні оператори bash. Ми оголосили змінну, а потім обчислюємо її та приймаємо рішення на основі її значення. При цьому, для перевірки типу “менше, ніж” застосовується запис –lt, для “більше, ніж” — запис -gt, а для перевірки на “рівно” — запис -eq:

Результат:

Вивід показує, що Число меньше 10, тому що значення змінної дорівнює 7, що явно менше 10. У цьому прикладі виконується умова.

Аналогічно, ми можемо використовувати умови OR (||) та AND (&&) всередині блоку if для обчислення кількох умов. Давайте розглянемо приклад оператора OR:

Результат:

Тепер давайте використаємо оператор AND всередині умови if. В операторі AND обидві умови повинні бути істинними.

Результат:

Оператор else if

Оператор else if використовується для обчислення декількох умов. Для визначення оператора else if використовується ключове слово elif.

Давайте розглянемо приклад з користувацьким вводом (ключове слово read використовується для отримання вхідних даних від користувача):

Результат:

Цикл while

Цикл while використовується для багаторазового виконання коду. Він обчислює умову і продовжує виконання доти, доки умова не стане помилковою. Синтаксис циклу while в bash виглядає наступним чином:

while [умова]
do
команди
done

Якщо [умова] істинна, виконується блок do.

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

Результат:


Цикл for

Цикл for також застосовується для багаторазового виконання одного й того ж блоку коду. Синтаксис циклу for bash виглядає наступним чином:

for ((оголошення_змінних; умова; інкремент/декремент_лічильника))
do
команди
done

Розглянемо приклад циклу for, в якому збільшуватимемо значення змінної і виводитимемо його в кожній ітерації:

Результат:


Висновки

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

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (1 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *