Введение
Добро пожаловать, будущий системный администратор! Вы только что присоединились к активно развивающейся технологической компании в качестве младшего DevOps-инженера. Ваш старший коллега отправился в заслуженный отпуск, а на вашем столе появилась важная задача. Основной сервер приложения создаёт множество файлов журналов, и они быстро занимают всё больше места на диске. Ваша миссия — стать мастером сценариев.
Вам нужно создать автоматизированный сценарий оболочки для управления этими файлами журналов. Речь не просто о выполнении нескольких команд, а о создании надёжного инструмента, который можно использовать повторно. Вы начнёте с простого сценария, а затем постепенно добавите переменные, пользовательский ввод, проверку ошибок и циклы. К концу испытания у вас будет готов сценарий, который умеет создавать резервные копии и управлять файлами. Вы докажете свою пользу команде и спасёте ситуацию!
Начнём писать сценарии!
- Пройдите управляемую лабораторную работу Shell Scripting Fundamentals, а затем вернитесь и снова попробуйте выполнить это испытание.
Написание простого сценария оболочки
Сначала заложите основу. Каждый хороший сценарий начинается с одной строки. Вам нужно создать файл сценария и добавить простую команду, чтобы убедиться, что всё работает правильно. Этот начальный шаг подтвердит корректность настройки и готовность к созданию более сложной логики.
Задания
- Создайте новый файл сценария оболочки с именем
log_manager.shв каталоге~/project. - Добавьте в самое начало сценария строку shebang (
#!/bin/bash). Она указывает системе, какой интерпретатор использовать. - Добавьте команду, которая выводит на экран сообщение «Log Manager Initialized.».
- Сделайте сценарий исполняемым с помощью команды
chmod +x.
Требования
- Сценарий должен называться
log_manager.sh. - Сценарий должен находиться в каталоге
~/project. - Первая строка должна быть
#!/bin/bash. - Для вывода требуемого сообщения сценарий должен использовать команду
echo. - У сценария должны быть права на выполнение (используйте
chmod +x log_manager.sh).
Примеры
После создания файла и выдачи ему права на выполнение полный процесс должен выглядеть так:
Сначала проверьте, что файл сценария существует:
ls ~/project/
log_manager.sh
Выдайте сценарию права на выполнение:
chmod +x ~/project/log_manager.sh
Теперь запустите сценарий:
./log_manager.sh
Сценарий должен вывести:
Log Manager Initialized.
Также можно проверить содержимое сценария:
cat ~/project/log_manager.sh
Файл должен содержать:
#!/bin/bash
echo "Log Manager Initialized."
Подсказки
- Для создания и редактирования файла можно использовать текстовый редактор командной строки, например
nano. Пример:nano log_manager.sh. - Команда
echoвыводит строку текста. - Используйте
chmod +x filename, чтобы сделать сценарий исполняемым. Параметр+xдобавляет владельцу файла право на выполнение.
Добавление переменных и пользовательского ввода
Сценарий с жёстко заданными значениями не отличается гибкостью. Чтобы сделать сценарий более динамичным и пригодным для повторного использования, добавьте переменные. Вы определите переменную для каталога с журналами и запросите у пользователя метку запуска резервного копирования. Благодаря этому сценарий можно адаптировать к разным ситуациям без изменения самого кода.
Задания
- Измените сценарий
log_manager.sh. - Определите переменную с именем
LOG_DIRи присвойте ей путь/home/labex/project/app_logs. - Добавьте строку, выводящую сообщение «Enter the backup filename: », чтобы запросить ввод пользователя.
- Используйте команду
read, чтобы сохранить введённое значение в новую переменную с именемBACKUP_FILENAME. - Добавьте последнюю команду
echoдля подтверждения настроек. Она должна выводить сообщение наподобие «Backing up logs to: [filename]», где[filename]— значение, введённое пользователем.
Требования
- Сценарий должен содержать переменную
LOG_DIRсо значением/home/labex/project/app_logs. - Для получения пользовательского ввода сценарий должен использовать команду
read. - Введённое пользователем значение должно сохраняться в переменной
BACKUP_FILENAME. - В последнем выводе должна использоваться переменная
$BACKUP_FILENAME.
Примеры
При запуске изменённый сценарий должен запросить ввод и вывести сообщение с подтверждением. Взаимодействие должно выглядеть так:
./log_manager.sh
Log Manager Initialized.
Enter the backup filename: daily_backup
Backing up logs to: daily_backup
Сценарий должен остановиться на запросе «Enter the backup filename:» и ждать, пока пользователь введёт имя и нажмёт Enter. После ввода он выводит сообщение с подтверждением, используя полученное значение. В этом испытании это значение является меткой запуска, отображаемой в выводе. Само резервное копирование выполняется на шаге 4: файлы .log копируются в ~/project/backups.
Подсказки
- Для определения переменной используйте синтаксис
VARIABLE_NAME="value". Между именем переменной, знаком=и значением не должно быть пробелов. - Чтобы использовать значение переменной, добавьте перед её именем знак
$, например$MY_VARIABLE. - Команда
readприостанавливает сценарий и ждёт, пока пользователь что-либо введёт и нажмёт Enter.
Реализация условной логики
Хороший сценарий умеет предвидеть проблемы. Что произойдёт, если указанный каталог с журналами не существует? Сценарий завершится с ошибкой. Чтобы сделать его надёжнее, добавьте условную логику. С помощью оператора if проверьте существование каталога с журналами до выполнения каких-либо операций.
Задания
- Измените сценарий
log_manager.sh. - Добавьте оператор
if, который проверяет существование каталога, указанного переменной$LOG_DIR. - Если каталог существует, сценарий должен продолжить работу как раньше: запросить имя файла и выполнить остальные действия.
- Если каталог не существует, сценарий должен вывести сообщение об ошибке «Error: Log directory not found.» и немедленно завершиться с ненулевым кодом возврата.
Требования
- Сценарий должен использовать оператор
if. - Условие должно проверять существование каталога с помощью оператора тестирования
-d. - Если каталог не существует, сценарий должен вывести указанное сообщение об ошибке с помощью
echo. - Если каталог не существует, сценарий должен завершиться командой
exit 1.
Примеры
Если каталог с журналами существует, сценарий должен работать нормально:
./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: test_backup.tar.gz
Backing up logs to: test_backup.tar.gz
Если каталог с журналами не существует, сценарий должен вывести ошибку и завершиться:
./log_manager.sh
Log Manager Initialized.
Error: Log directory not found.
В этом случае сценарий завершается сразу после вывода сообщения об ошибке: он не запрашивает пользовательский ввод и не выполняет операции резервного копирования.
Подсказки
- Синтаксис базового оператора
if:if [ condition ]; then ... else ... fi. - Проверка
[ -d "$DIRECTORY_PATH" ]возвращает истину, если$DIRECTORY_PATHсуществует и является каталогом. exit 1— стандартный способ сообщить, что сценарий завершился с ошибкой.
Цикл для операций с файлами
Теперь перейдём к основной части автоматизации! Вам нужно обработать файлы в каталоге с журналами. Используйте цикл for, чтобы пройти по всем файлам с расширением .log в каталоге app_logs. В этом испытании достаточно просто скопировать их в новый каталог резервных копий. Введённое значение BACKUP_FILENAME остаётся меткой запуска, которая выводится в сообщении, а не именем создаваемого сценарий файла архива.
Задания
- Сначала создайте каталог с именем
backupsвнутри~/project, куда будут копироваться файлы журналов. - Измените сценарий
log_manager.sh. - Внутри блока
if, где подтверждено существование каталога, добавьте циклfor. - Цикл должен проходить по каждому файлу с расширением
.logв каталоге$LOG_DIR. - Внутри цикла используйте команду
cp, чтобы скопировать каждый файл журнала в каталог~/project/backups. - Для каждого скопированного файла выводите сообщение наподобие «Copied [filename]».
Требования
- Сначала создайте каталог
~/project/backupsиз командной строки. - Сценарий должен использовать цикл
for. - Цикл должен обрабатывать файлы в
$LOG_DIR, соответствующие шаблону*.log. - Для копирования файлов в
~/project/backupsвнутри цикла необходимо использовать командуcp. - Оператор
echoдолжен сообщать имя каждого копируемого файла.
Примеры
После выполнения этого шага запустите сценарий и укажите имя резервной копии. Сценарий должен обработать все файлы журналов и вывести примерно такой результат:
./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: daily_backup
Backing up logs to: daily_backup
Copied /home/labex/project/app_logs/access.log
Copied /home/labex/project/app_logs/debug.log
Copied /home/labex/project/app_logs/error.log
Backup complete.
Сценарий должен пройти по каждому файлу .log в каталоге и вывести сообщение «Copied» для каждого файла. Точные имена зависят от файлов журналов, находящихся в каталоге app_logs.
После завершения сценария проверьте, что файлы были скопированы, просмотрев содержимое каталога backups:
ls ~/project/backups/
access.log debug.log error.log
Подсказки
- Для создания каталога используйте команду
mkdir. - Цикл
forдля обработки файлов можно записать так:for file in /path/to/*.log; do ... done. - Синтаксис команды
cp:cp <source> <destination>. - На каждой итерации переменная цикла, например
file, содержит полный путь к текущему файлу.
Итоги
Поздравляем, мастер сценариев! Вы успешно создали с нуля полноценный рабочий сценарий оболочки. Вы решили реальную задачу — управление файлами журналов — с помощью автоматизации.
В этом испытании вы освоили несколько фундаментальных понятий написания сценариев оболочки:
- Создание и структура сценария с помощью shebang.
- Использование переменных для динамической работы сценария.
- Получение пользовательского ввода с помощью
read. - Надёжная проверка ошибок с помощью операторов
if. - Автоматизация повторяющихся задач с помощью циклов
for. - Управление правами доступа к файлам и запуск сценария.
Теперь ваш сценарий умеет автоматически проверять существование каталогов с журналами, обрабатывать все файлы журналов и копировать их в резервное расположение. Это важный шаг на вашем пути к профессии DevOps-инженера или системного администратора. Освоенные навыки станут основой для создания гораздо более сложных сценариев автоматизации, которые смогут управлять серверами, развёртывать приложения и обрабатывать данные. Вы доказали, что способны справляться с ответственными задачами и создавать рабочие решения. Отличная работа!



