Модуль 18

Shell scripting: основи Bash

Ось урок, створений спеціально для тебе у стилі David Malan. Вмикай уяву, ми починаємо! 🚀


🎓 Тема: Shell Scripting: Основи Bash

Привіт, друзі! 👋

1. 🔥 Вступ: проблема та мотивація

Уявіть собі ранок понеділка. Ви приходите на роботу, відкриваєте ноутбук і... починається рутина. Вам потрібно: 1. Створити нову папку для проєкту. 2. Створити всередині файли index.html та style.css. 3. Запустити локальний сервер. 4. Відкрити браузер. 5. Відкрити редактор коду.

Ви робите це в понеділок. Ви робите це у вівторок. До п'ятниці ви вже ненавидите ці кліки мишкою. 😫

Питання до вас: Ви хочете все життя натискати одні й ті ж кнопки, як робот, чи ви хочете запрограмувати робота, щоб він робив це за вас, поки ви п’єте каву? ☕️

В цьому і є суть Shell Scripting (Bash-скриптів). Це не просто "код". Це спосіб перетворити 20 нудних дій на одну команду.

Уявіть, що командний рядок (термінал) — це джин 🧞‍♂️. Раніше ви просили його: "Дай яблуко", "Дай ще яблуко". Скрипт — це сувій, на якому ви пишете: "Коли я плесну в долоні — дай мені ящик яблук, помий їх і зроби сік".

Без скриптів ви — користувач системи. Зі скриптами ви — її архітектор.


2. 🧠 Теоретична база (без сухої академічності)

Давайте зазирнемо "під капот". Що таке Bash-скрипт?

Насправді, це звичайнісінький текстовий файл. Так, просто текст. Але ми додаємо в нього трохи "магії", щоб система зрозуміла: "Гей, це не список покупок, це інструкції до виконання!".

Три кити Bash-скриптингу:

  1. Shebang (#!) — "Адреса на конверті". Ви побачите цей дивний символ на початку файлу: #!/bin/bash.

    • # (шарп) + ! (бенг) = Shebang.
    • Як це працює: Коли ви запускаєте файл, система дивиться на перший рядок. Вона бачить #!/bin/bash і розуміє: "Ага! Мені треба покликати програму Bash, щоб вона прочитала і виконала все, що написано далі".
    • Аналогія: Це як написати на коробці "Для кухні". Вантажники (система) відразу несуть її на кухню (Bash), а не в гараж (Python).
  2. Дозволи (Permissions) — "Перепустка". За замовчуванням Linux параноїдальний. Він не дозволяє запускати файли, щоб ви випадково щось не зламали.

    • Команда chmod +x my_script.sh дає файлу "зелене світло" на виконання (execute). Без цього ваш скрипт — просто текст.
  3. Змінні — "Коробки з підписами". У програмуванні ми не любимо жорстко прописувати значення.

    • Замість "Привіт, Дмитро", ми пишемо "Привіт, $NAME".
    • Тепер ми можемо покласти в коробку $NAME будь-яке ім'я, і скрипт спрацює універсально.

Що треба запам’ятати залізно: Скрипт читається зверху вниз, рядок за рядком. Якщо помилка в рядку 2, скрипт може виконати рядок 1 і впасти на другому. Це не компільована програма, це список наказів.


3. 🧪 Приклади (від простого до реального)

Приклад 1: "Hello World" (Класика)

Створимо файл hello.sh.

#!/bin/bash
echo "Привіт, світе! Я живий!"

Питання: Що станеться, якщо я просто напишу це у файлі і спробую запустити? Відповідь: Швидше за все, система скаже "Permission denied" (Доступ заборонено).

Як зробити правильно: 1. Пишемо код у файл. 2. В терміналі: chmod +x hello.sh (Даємо права). 3. Запускаємо: ./hello.sh (Крапка і скісна риска означають "запусти файл саме з цієї папки").


Приклад 2: Автоматизація рутини (Бекап)

Припустимо, ви пишете курсову і боїтеся її втратити. Давайте напишемо скрипт backup.sh, який створює папку для бекапів і копіює туди вашу роботу.

#!/bin/bash

# Оголошуємо змінну - назву папки
BACKUP_DIR="my_backups"

echo "📂 Створюю папку для бекапів..."
mkdir -p $BACKUP_DIR  # -p означає "не видавай помилку, якщо папка вже є"

echo "💾 Копіюю файли..."
cp work.txt $BACKUP_DIR/work_backup.txt

echo "✅ Готово! Твої файли в безпеці."

Чому це круто? Ви один раз написали логіку. Тепер, скільки б разів ви не запускали ./backup.sh, він завжди чітко виконає інструкцію. Ніяких "Ой, я забув, в яку папку копіювати".


Приклад 3: Динаміка (Аргументи)

А що, якщо ми хочемо вітатися з різними людьми, не переписуючи код? Використаємо аргументи. $1 означає "перше слово, яке користувач написав після назви скрипта".

Файл greet.sh:

#!/bin/bash

NAME=$1 # Беремо перший аргумент

echo "Привіт, $NAME! Радий тебе бачити в терміналі."
echo "Сьогодні: $(date)" # Виконуємо команду date всередині echo

Запуск: ./greet.sh Олена -> "Привіт, Олена!..." ./greet.sh Тарас -> "Привіт, Тарас!..."


4. 🛠 Практична частина

Настав час бруднити руки! Відкривайте термінал. 💻

🔹 Завдання 1: Перший крок Створіть скрипт me.sh. Зробіть його виконуваним (chmod). Нехай він виводить: "Мене звати [Ваше Ім'я] і я вчу Bash!".

🔹 Завдання 2: Організатор Напишіть скрипт setup.sh, який одним махом створює структуру папок для нового року: 2024, а всередині неї папки Winter, Spring, Summer, Autumn. (Підказка: команда mkdir).

🔹 Завдання 3: Робота з аргументами Створіть скрипт mktag.sh. Він має приймати одне слово (аргумент) і створювати папку з такою назвою, а всередині — порожній файл info.txt. Приклад запуску: ./mktag.sh ProjectX -> має з'явитися папка ProjectX з файлом усередині.

🔹 Завдання 4: Міні-кейс "Детектив" Виправте помилку в цьому скрипті (код нижче). Він не працює. Чому?

#!/bin/bash
name = "Agent 007"  # Увага сюди
echo "Hello, $name"

(Спробуйте запустити і подивіться на помилку).

🔹 Питання "А що, якщо..." Що станеться, якщо у Завданні 3 ви запустите скрипт без аргументу (просто ./mktag.sh)? Як поведе себе змінна $1? (Спробуйте і проаналізуйте результат).


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі в Bash?

  1. Пробіли — це зло. У більшості мов x = 5 — це нормально. В Bash — це фатальна помилка.

    • NAME="David" (правильно: без пробілів навколо =)
    • NAME = "David" (система подумає, що ви намагаєтесь запустити команду NAME з аргументами = та "David"). Це найпоширеніша помилка. Будьте уважні!
  2. Лінь — двигун прогресу. Досвідчений розробник думає так: "Якщо я маю зробити це більше ніж двічі, я напишу скрипт". Не витрачайте час на повторення. Автоматизуйте.

  3. Читабельність. Bash може виглядати як набір дивних символів.

    • Пишіть коментарі (# Це коментар). Через місяць ви подякуєте собі за те, що пояснили, що робить цей магічний рядок.

6. 🧩 Підсумок

Сьогодні ви зробили великий крок. Ви перестали боятися чорного екрана з літерами.

Що ви тепер вмієте: * ✅ Створювати файли скриптів (.sh). * ✅ Давати їм права на життя (chmod +x). * ✅ Використовувати змінні, щоб код був гнучким. * ✅ Приймати аргументи ззовні.

Але це лише початок. Тизер: Уявіть, що у вас є 1000 фотографій, і їх треба перейменувати за датою створення. Писати 1000 команд mv? Ні. На наступному уроці ми вивчимо Цикли (Loops) і Умови (If/Else). Ми навчимо скрипт приймати рішення самостійно!

А поки — практикуйтесь і автоматизуйте все, що бачите! Побачимось! 👋