1. Умови в bash: if, else, і трохи магії
Для чого потрібні умови?
Умови дозволяють вашому скрипту приймати рішення, ґрунтуючись на вхідних даних, змінних або навіть результатах виконання команд. Наприклад, ви хочете перевірити, чи існує файл, або переконатися, що сервер доступний, щоб виконати наступну дію. Ось тут і стає в пригоді конструкція if.
Основний синтаксис
Ось як виглядає класична умова if в bash:
if [ умова ]; then
# Тут виконується код, якщо умова істинна
echo "Умова виконана!"
else
# Тут виконується код, якщо умова хибна
echo "Умова не виконана!"
fi
Ключові слова:
if,then,else, іfi(закриваючий блокif) — це магічні слова. Без них скрипт працювати не буде.- Квадратні дужки
[ ... ]використовуються для перевірки умов.
Приклад 1: Перевірка існування файлу
#!/bin/bash
FILE="/etc/passwd"
if [ -f $FILE ]; then
echo "Файл $FILE існує."
else
echo "Файл $FILE не знайдено."
fi
Пояснення:
-fперевіряє, чи існує файл.- Якщо файл існує, команда
echoвиводить повідомлення про це. Якщо ні, виконується блокelse.
Умови з командами
Ви можете використовувати результат виконання команди як умову, адже в Linux все — це команда.
Приклад 2: Перевірка доступності сайту
#!/bin/bash
if ping -c 1 example.com &> /dev/null; then
echo "Сайт доступний."
else
echo "Сайт недоступний."
fi
Пояснення:
ping -c 1надсилає один запит до сервера. Якщо він відповідає, умова стає істинною.&> /dev/nullприховує вивід команди, щоб не засмічувати термінал.
Використання оператора elif
Іноді недостатньо просто if і else. Потрібно врахувати кілька умов. Тут стає в пригоді elif.
Приклад 3: Визначення часу доби
#!/bin/bash
HOUR=$(date +%H)
if [ $HOUR -lt 12 ]; then
echo "Доброго ранку!"
elif [ $HOUR -lt 18 ]; then
echo "Добрий день!"
else
echo "Добрий вечір!"
fi
Пояснення:
date +%Hповертає поточну годину у 24-годинному форматі.- Ми порівнюємо поточний час з фіксованими значеннями: якщо менше 12 — ранок, менше 18 — день, інакше — вечір.
2. Цикли у bash: повторення — мати навчання
Цикли — це спосіб змусити твій скрипт повторювати дії, поки виконується певна умова. Це особливо корисно, якщо треба обробити багато файлів, повторити задачу кілька разів або чекати певної події.
Цикл for
for проходить по списку значень (наприклад, файли чи числа) і виконує вказану дію для кожного з них.
Приклад 4: Простий цикл for
#!/bin/bash
for i in {1..5}; do
echo "Це ітерація номер $i"
done
Пояснення:
{1..5}— список чисел від 1 до 5.- На кожній ітерації змінна
iприймає значення зі списку.
Приклад 5: Перебір файлів у директорії
#!/bin/bash
for FILE in /etc/*; do
echo "Обробляється файл: $FILE"
done
Пояснення:
/etc/*— це список усіх файлів у папці/etc.- На кожній ітерації змінна
FILEмістить ім'я одного файлу.
Цикл while
while виконує дії, поки виконується умова.
Приклад 6: Вгадай число
#!/bin/bash
SECRET=5
GUESS=0
while [ $GUESS -ne $SECRET ]; do
echo "Введіть вашу здогадку (число від 1 до 10):"
read GUESS
done
echo "Ви вгадали!"
Пояснення:
[ $GUESS -ne $SECRET ]— умова продовжується, поки введене числоGUESSне дорівнює секретномуSECRET.
Комбінуємо цикли та умови
Іноді умови та цикли працюють разом.
Приклад 7: Перевірка кількох сайтів
#!/bin/bash
SITES=("example.com" "google.com" "nonexistent.website")
for SITE in ${SITES[@]}; do
if ping -c 1 $SITE &> /dev/null; then
echo "$SITE доступний."
else
echo "$SITE недоступний."
fi
done
Пояснення:
- Масив
SITESмістить список сайтів. forпроходить по кожному сайту з масиву.ifперевіряє доступність сайту за допомогоюping.
3. Практичні вправи
Перевірка домену
Напишіть скрипт, який приймає доменне ім'я як аргумент і перевіряє його доступність.
Підказка:
if ping -c 1 $1 &> /dev/null; then
echo "Домен доступний."
else
echo "Домен недоступний."
fi
Робота з файлами
Напишіть скрипт, який перевіряє існування кількох файлів і виводить результат для кожного з них.
Підказка:
FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
if [ -f $FILE ]; then
echo "$FILE існує."
else
echo "$FILE не знайдено."
fi
done
Таблиця множення
Напишіть скрипт із вкладеними циклами, який виводить таблицю множення для чисел від 1 до 10.
Підказка:
for i in {1..10}; do
for j in {1..10}; do
echo -n "$((i * j)) "
done
echo ""
done
Тепер ви можете додавати інтелект і логіку вашим bash-скриптам. Умови дозволять вам перевіряти стани та приймати рішення, а цикли допоможуть автоматизувати повторювані завдання. Попереду вас чекає ще більше можливостей для автоматизації завдань!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ