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-скриптам. Условия позволят вам проверять состояния и принимать решения, а циклы помогут автоматизировать повторяющиеся задачи. Впереди вас ждёт ещё больше возможностей для автоматизации задач!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ