Ось готовий урок, створений за твоїм майстер-промптом.
🎓 CS50: Основи Bash — Змінні, Умови та Цикли
Вітаю всіх! Радий бачити вас на цьому занятті. 👋
1. 🔥 Вступ: Чому ми взагалі про це говоримо?
Уявіть собі ситуацію. Ви — фотограф або системний адміністратор. У вас на робочому столі є папка, в якій лежить 10 000 файлів. Це фотографії, лог-файли або документи.
Ваше завдання: перейменувати кожен із них, додавши сьогоднішню дату в назву.
Як ви це зробите? 1. Клік правою кнопкою -> Перейменувати -> Ввести дату -> Enter. 2. Повторити 9 999 разів.
Звучить як пекло, правда? На це піде цілий день, і ви точно зробите помилку десь на 500-му файлі.
Але що, якби я сказав вам, що це можна зробити за 3 секунди? І не магією, а написавши всього три рядки тексту.
Саме тут на сцену виходить Bash. Це не просто чорне вікно, яке лякає новачків. Це ваш персональний армії роботів. Ви — генерал. Ви віддаєте наказ, а Bash виконує нудну роботу за вас.
Сьогодні ми розберемо три кити, на яких тримається будь-яка автоматизація: 1. Змінні (щоб пам'ятати дані). 2. Умови (щоб приймати рішення). 3. Цикли (щоб повторювати дії).
Готові зекономити собі сотні годин життя? Поїхали! 🚀
2. 🧠 Теоретична база: Що "під капотом"?
Давайте відкинемо складні терміни й подивимося на логіку.
📦 Змінні (Variables)
Уявіть, що ви переїжджаєте. Ви складаєте речі в коробки. Щоб не забути, що де лежить, ви пишете маркером на коробці: "КУХНЯ" або "КНИГИ".
У програмуванні змінна — це і є ця коробка з написом.
* Ім'я змінної — напис маркером (FILE_NAME).
* Значення — те, що лежить усередині (report.txt).
У Bash це виглядає так:
NAME="Ivan"
⚠️ Критично важливо: У Bash не можна ставити пробіли навколо знака
=. *NAME = "Ivan"— ❌ Помилка! Bash подумає, що ви намагаєтеся запустити програму з назвоюNAME. *NAME="Ivan"— ✅ Правильно.
Щоб "зазирнути" в коробку і дістати значення, ми ставимо перед назвою знак долара: $NAME.
🚦 Умови (Conditions)
Це ваші перехрестя. Життя — це постійний вибір: "Якщо йде дощ, я беру парасольку. Інакше — йду в футболці".
Комп'ютер теж повинен вміти робити вибір.
if (якщо) ... then (тоді) ... else (інакше) ... fi (кінець умови).
Зверніть увагу: fi — це if навпаки. Так Bash розуміє, що ви закінчили думку.
🔄 Цикли (Loops)
Це конвеєр на заводі. Уявіть, що вам треба перевірити 100 яєць на свіжість. Ви не пишете окрему інструкцію для кожного яйця. Ви кажете: "Для кожного яйця в лотку: візьми його, подивись на світло, поклади назад".
Це і є цикл for. Він бере елементи зі списку по черзі й робить з ними одну й ту саму дію.
3. 🧪 Приклади: Від "Hello World" до реальності
Приклад 1: Просто привітання (Змінні)
Створимо файл hello.sh.
#!/bin/bash
USER_NAME="Олексій"
echo "Привіт, $USER_NAME! Ласкаво просимо в Bash."
Як думаєте, що буде, якщо ми приберемо $ перед USER_NAME у команді echo?
Комп'ютер просто надрукує слово "USER_NAME". Знак $ — це ключ, який відмикає "коробку" зі значенням.
Приклад 2: Фейс-контроль (Умови)
Давайте напишемо скрипт, який перевіряє, чи ви повнолітній.
#!/bin/bash
AGE=16
if [ $AGE -ge 18 ]; then
echo "Вхід дозволено 🍺"
else
echo "Тобі ще рано, друже juce 🧃"
fi
(Примітка: -ge означає "greater or equal" — більше або дорівнює).
Увага на пробіли!
У Bash конструкція [ $AGE -ge 18 ] вимагає пробілів всередині квадратних дужок. Без них — помилка. Це як дихати: без простору все задихнеться.
Приклад 3: Реальна автоматизація (Цикли)
У нас є папка з файлами: img1.jpg, img2.jpg, img3.jpg. Ми хочемо зробити резервну копію кожного файлу, додавши префікс backup_.
#!/bin/bash
# Перебираємо всі файли, що закінчуються на .jpg
for FILE in *.jpg
do
echo "Копіюю файл $FILE..."
cp "$FILE" "backup_$FILE"
done
echo "Всі файли скопійовано!"
Що тут відбувається?
1. *.jpg — це шаблон "все, що закінчується на .jpg".
2. Змінна FILE по черзі стає img1.jpg, потім img2.jpg...
3. Команда cp (copy) робить свою справу.
Ми щойно замінили 100 кліків мишкою на 5 рядків коду. 👏
4. 🛠 Практична частина
А тепер ваша черга! Відкрийте термінал (або онлайн-редактор Bash) і спробуйте.
Завдання 1: "Ламаємо" систему
Скопіюйте Приклад 1. Спробуйте поставити пробіл ось так: USER_NAME = "Олексій". Запустіть. Яку помилку ви бачите? Запам'ятайте її, вона буде часто траплятися.
Завдання 2: Світлофор
Напишіть скрипт з умовою:
* Створіть змінну COLOR.
* Якщо COLOR дорівнює "green" — виведіть "Їдь!".
* Якщо "red" — виведіть "Стій!".
* В усіх інших випадках — "Чекай".
(Підказка: для порівняння рядків використовуйте знак = або == всередині [ ... ]).
Завдання 3: Генератор папок
Напишіть цикл, який створить 5 папок з назвами project_1, project_2 ... project_5.
(Підказка: використовуйте команду mkdir та діапазон {1..5} у циклі for).
Завдання 4: Міні-кейс "Чистота"
Уявіть, що ви завантажили купу файлів .txt і .png. Напишіть скрипт, який проходить циклом по всіх файлах, і якщо файл закінчується на .txt — він пише "Це текст: [назва файлу]".
5. 💡 Мислення як у розробника
Ви зараз вчитеся не просто писати літери, ви вчитеся мислити алгоритмами.
Ось як думає досвідчений інженер, коли пише на Bash:
- "Параноя пробілів": У Python відступи мають значення, у Bash — пробіли. Завжди перевіряйте пробіли навколо
[ ]та їх відсутність навколо=. - Завжди використовуйте лапки: Коли ви працюєте зі змінними, краще писати
"$FILE", а не просто$FILE.- Чому? Якщо ваш файл називається
My Photo.jpg(з пробілом), без лапок Bash подумає, що це два окремих файли:MyіPhoto.jpg. Лапки тримають це як одне ціле.
- Чому? Якщо ваш файл називається
- Спочатку
echo, потім дія: Перш ніж запустити команду, яка видаляє або переміщує файли, спочатку напишітьecho rm $FILE. Запустіть, подивіться, що виведеться на екран. Якщо все ок — прибирайтеechoі запускайте по-справжньому. Це врятує вас від випадкового видалення всієї системи.
6. 🧩 Підсумок
Сьогодні ми отримали суперсилу: 1. Ми навчилися зберігати інформацію у змінних (коробках). 2. Ми навчилися приймати рішення за допомогою умов (перехрестя). 3. Ми навчилися масштабувати зусилля за допомогою циклів (конвеєр).
Тепер ви можете написати скрипт, який сам зробить бекап, розсортує файли або перевірить, чи працює ваш сервер, поки ви п'єте каву. ☕️
Що далі? Ви помітили, що іноді ми копіюємо шматки коду? На наступному уроці ми розберемо Функції — спосіб навчити Bash новим командам, які придумали саме ви, щоб ніколи не повторюватись.
А поки що — практикуйтесь! Спробуйте автоматизувати щось маленьке сьогодні. Успіхів!