Написание скриптов в Linux. Каковы принципы составления сценариев на Bash?

написание скриптов в linux. каковы принципы составления сценариев на bash?

Цели использования скриптов

Системные администраторы, работающие в Linux, сталкиваются с периодически повторяющимися задачами. Например, резервным копированием, установкой программ на новые компьютеры, изменением конфигурационных файлов. Как правило, эти задачи требуют ввода одних и тех же команд. Для автоматизации таких операций можно создавать скрипты командной оболочки Bash, также именуемые сценариями.

Скрипт — это обычный текстовый файл, содержащий в себе последовательности вызовов разнообразных команд. Запуск такого сценария осуществляет общую интерпретацию файла и построчное выполнение инструкций. Более того Bash имеет встроенный язык программирования с поддержкой условных конструкций и циклов, что позволяет выполнять различную логику скрипта в зависимости от переданных параметров или окружения.

Отметим, что создание скриптов возможно и для других видов командных оболочек. Однако синтаксис конструкций и общие правила могут отличаться в значительной мере. Bash используется по умолчанию для большинства дистрибутивов.

Заметка
Данный урок описывает лишь общие теоретические принципы использования сценариев в операционной системе Linux. Следующие статьи учебного курса дают более детальную информацию.

Небольшой пример сценария

Ниже приводится пример скрипта, ищущего все файлы журналов в директории /var/log. Если вызов происходит без указания параметров, имена всех журналов записываются в файл log-list.txt, лежащий в домашней директории пользователя. При указании строкового параметра поиск осуществляется по его вхождению в имена файлов. Данный Bash скрипт должен работать одинаково в любом дистрибутиве Linux.

#!/bin/bash

if [ -n "$1" ]; then
    find /var/log -type f -name "*$1*.log" -print > ~/log-list.txt
    echo "Осуществлен поиск по фразе '$1'"

else
    find /var/log -type f -name "*.log" -print > ~/log-list.txt
    echo 'Поиск всех файлов журналов закончен'
fi

Создайте в директории /usr/local/bin файл с именем findlog и скопируйте в него, приведенный выше программный код. Файл нужно сделать исполняемым с помощью команды chmod, или нажмите по нему правой кнопкой мыши и зайдите в пункт «свойства». В открывшемся окне выберите закладку «права» и активируйте переключатель «разрешить выполнение файла как программы». После данных операций вы сможете запускать сценарий в терминале с помощью указания его имени.

sudo findlog 'error'
Осуществлен поиск по фразе 'error'

sudo findlog
Поиск всех файлов журналов закончен

Пояснения к использованию сценариев

Любой скрипт, создаваемый в Linux, должен начинаться со строки определения исполняемой программы. Обратите внимание на первую строчку из примера «#!/bin/bash». Она, по сути, является комментарием, так как начинается со знака решетки, но восклицательный знак говорит терминалу о том, что последующий текст определяет место расположения программы обработчика. В данном случае мы указали место расположения исполняемого файла командного интерпретатора Bash.

Файл, содержащий сценарий, должен иметь права на выполнение. Это обязательное условие, так как Linux разграничивает обычные текстовые файлы и исполняемые программы. Пример, приведенный в начале урока, дает пояснения к активации данной опции, но назначение прав доступа будет рассмотрено более детально в следующих уроках учебного курса.

Мы поместили сценарий в директории /usr/local/bin. Это одна из папок, на которые операционная система обращает особое внимание. При вводе имени команды в окне терминала, ОС просматривает ряд папок на наличие одноименного исполняемого файла.

Если скрипт расположен в какой-либо другой директории, вызвать его можно с помощью прямого обращения. Для этого нужно указать абсолютный или относительный путь до файла. Если файл расположен в текущей директории, обязательным условием является использование конструкции «./имя_скрипта».

Переменная окружения $PATH содержит все системные директории, по которым осуществляется поиск программ. Они разделяются двоеточием. Посмотреть список можно с помощью приведенного ниже примера.

echo $PATH
/home/username/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Последние публикации