Ось урок, створений спеціально для тебе у стилі David Malan. Вмикай уяву, ми починаємо! 🚀
🎓 Тема: Shell Scripting: Основи Bash
Привіт, друзі! 👋
1. 🔥 Вступ: проблема та мотивація
Уявіть собі ранок понеділка. Ви приходите на роботу, відкриваєте ноутбук і... починається рутина. Вам потрібно:
1. Створити нову папку для проєкту.
2. Створити всередині файли index.html та style.css.
3. Запустити локальний сервер.
4. Відкрити браузер.
5. Відкрити редактор коду.
Ви робите це в понеділок. Ви робите це у вівторок. До п'ятниці ви вже ненавидите ці кліки мишкою. 😫
Питання до вас: Ви хочете все життя натискати одні й ті ж кнопки, як робот, чи ви хочете запрограмувати робота, щоб він робив це за вас, поки ви п’єте каву? ☕️
В цьому і є суть Shell Scripting (Bash-скриптів). Це не просто "код". Це спосіб перетворити 20 нудних дій на одну команду.
Уявіть, що командний рядок (термінал) — це джин 🧞♂️. Раніше ви просили його: "Дай яблуко", "Дай ще яблуко". Скрипт — це сувій, на якому ви пишете: "Коли я плесну в долоні — дай мені ящик яблук, помий їх і зроби сік".
Без скриптів ви — користувач системи. Зі скриптами ви — її архітектор.
2. 🧠 Теоретична база (без сухої академічності)
Давайте зазирнемо "під капот". Що таке Bash-скрипт?
Насправді, це звичайнісінький текстовий файл. Так, просто текст. Але ми додаємо в нього трохи "магії", щоб система зрозуміла: "Гей, це не список покупок, це інструкції до виконання!".
Три кити Bash-скриптингу:
-
Shebang (
#!) — "Адреса на конверті". Ви побачите цей дивний символ на початку файлу:#!/bin/bash.#(шарп) +!(бенг) = Shebang.- Як це працює: Коли ви запускаєте файл, система дивиться на перший рядок. Вона бачить
#!/bin/bashі розуміє: "Ага! Мені треба покликати програму Bash, щоб вона прочитала і виконала все, що написано далі". - Аналогія: Це як написати на коробці "Для кухні". Вантажники (система) відразу несуть її на кухню (Bash), а не в гараж (Python).
-
Дозволи (
Permissions) — "Перепустка". За замовчуванням Linux параноїдальний. Він не дозволяє запускати файли, щоб ви випадково щось не зламали.- Команда
chmod +x my_script.shдає файлу "зелене світло" на виконання (execute). Без цього ваш скрипт — просто текст.
- Команда
-
Змінні — "Коробки з підписами". У програмуванні ми не любимо жорстко прописувати значення.
- Замість "Привіт, Дмитро", ми пишемо "Привіт,
$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?
-
Пробіли — це зло. У більшості мов
x = 5— це нормально. В Bash — це фатальна помилка.- ✅
NAME="David"(правильно: без пробілів навколо=) - ❌
NAME = "David"(система подумає, що ви намагаєтесь запустити командуNAMEз аргументами=та"David"). Це найпоширеніша помилка. Будьте уважні!
- ✅
-
Лінь — двигун прогресу. Досвідчений розробник думає так: "Якщо я маю зробити це більше ніж двічі, я напишу скрипт". Не витрачайте час на повторення. Автоматизуйте.
-
Читабельність. Bash може виглядати як набір дивних символів.
- Пишіть коментарі (
# Це коментар). Через місяць ви подякуєте собі за те, що пояснили, що робить цей магічний рядок.
- Пишіть коментарі (
6. 🧩 Підсумок
Сьогодні ви зробили великий крок. Ви перестали боятися чорного екрана з літерами.
Що ви тепер вмієте:
* ✅ Створювати файли скриптів (.sh).
* ✅ Давати їм права на життя (chmod +x).
* ✅ Використовувати змінні, щоб код був гнучким.
* ✅ Приймати аргументи ззовні.
Але це лише початок.
Тизер: Уявіть, що у вас є 1000 фотографій, і їх треба перейменувати за датою створення. Писати 1000 команд mv? Ні.
На наступному уроці ми вивчимо Цикли (Loops) і Умови (If/Else). Ми навчимо скрипт приймати рішення самостійно!
А поки — практикуйтесь і автоматизуйте все, що бачите! Побачимось! 👋