`

Введение в создание Bash-сценариев

Определение Bash-сценария

Сценарий (скрипт) оболочки Bash представляет собой текстовый файл с набором команд, которые необходимо выполнить в определенном порядке и/или условиями. Bash-скрипт призван избавить пользователей Linux от ввода множества различных команд для решения частых задач.

Где хранить Bash-сценарии?

Перед началом написания сценария нужно определиться с местом его хранения. Системные сценарии обычно находятся в директориях /bin и /sbin, а также в /usr/bin и /usr/sbin. Для собственных сценариев рекомендую использовать каталоги /usr/local/sbin и /usr/local/bin, однако ничто вам не мешает (кроме ограничения прав записи) хранить свои сценарии в любых других не системных каталогах.

Если вы решили использовать, какой-либо нестандартный каталог, то не забудьте добавить его в переменную среды $PATH, чтобы вы могли запускать свои сценарии по имени, без указания полного пути.

Изменять переменную $PATH следует в файле ~/.bash_profile, если его нет то в ~/.profile.

Например,  если я хочу хранить сценарии в каталоге ~/oleg/bash_scripts, то мне необходимо написать следующую строку.

PATH="$PATH:~/oleg/bash_scripts"

Так при инициализации работы оболочки ваш каталог уже будет добавлен в переменную $PATH.

Как создать и выполнить Bash-сценарий?

Для примера, в каталоге /usr/local/sbin,  создадим скрипт say_hi.sh, который будет выводить в консоли текстовую строку "Hello Universe!".

touch /usr/local/sbin/say_hi.sh

Далее откроем этот файл любым текстовым редактором, например Vim.

vim /usr/local/sbin/say_hi.sh

И укажем в нем следующие строки.

Здесь первая строка является комментарием где указывается путь до интерпретатора, который будет выполнять скрипт.

Если не указать интерпретатор вручную, то будет использоваться интерпретатор по умолчанию, чаще всего это оболочка /bin/sh.

Во второй строке указана команда вывода echo и ее аргумент "Hello Universe!".

Чтобы скрипт мог быть выполнен к нему необходимо добавить бит исполнения файла.

chmod +x /usr/local/sbin/say_hi.sh

Теперь можно просто указать имя скрипта и запустить его.

say_hi.sh

В результате увидим следующее.

meliorem@ubuntu:~$ say_hi.sh
Hello Universe!

Скрипт можно также передать самой оболочке в качестве аргумента . В этом случае делать скрипт исполняемым не обязательно.
bash say_hi.sh

Ввод и вывод данных в Bash

Вывод текстовой информации можно осуществлять с помощью команд echo и printf.

Разница между ними лишь в том, что echo не позволяет форматировать текст (без добавления ключа -e) и делает автоматический перенос строки в отличии от printf.

Различия команд представлены ниже.

meliorem@ubuntu:~$ say_hi.sh
\tHello there! \u263b\n
Hello there! ☻
meliorem@ubuntu:~$

Ввод данных осуществляется с помощью команды - read. Результат ввода необходимо сохранять в переменную.

meliorem@ubuntu:~$ Введите ваше имя: Oleg
Добрый день, Oleg!
meliorem@ubuntu:~$

Комментарии в Bash

Комментарии предназначены для описания того, что происходит в скрипте на отдельных его участках, чтобы сам создатель скрипта и другие пользователи могли быстрее разобраться в тонкостях его работы.

Комментарии полностью игнорируются интерпретатором (кроме первой строки).

Однострочным комментарием будет считаться одна или несколько строк в начале которых стоит символ - #.

В Bash также доступны многострочные комментарии, которые начинаются с символа - : и находятся внутри двойных или одинарных кавычек.

Не забудьте оставить пробел между : и первой кавычкой.

Еще один вариант составления многострочного комментария.

Отладка Bash-скриптов

В Bash поддерживается отладка скриптов и проверка синтаксиса.

Используйте команду bash c ключом -x для запуска скрипта в режиме отладки.

bash -x script.sh

Также есть возможность передать ключ в самом скрипте.

Отладку также можно производить выборочно для отдельных участков кода. В этом поможет настройка параметров оболочки с помощью команды set.

Чтобы начать отладку определенного участка кода, вставьте строку с set -x в начало участка и set +x в его конец.

С помощью команды set можно включать и выключать определенные параметры оболочки. Ознакомится со списком параметров можно после ввода команды set -o.

  • set -x/set +x - начать/закончить отладку.
  • set -v - выводить строки ввода по мере их чтения.
  • set -n - проверка синтаксиса, без выполнения самого кода.
  • set -o [параметр]/set +o [параметр] - включение/выключение параметра.

В следующем примере команда создания каталога не будет выполнена, также в консоли появится сообщение об ошибке синтаксиса.

Особенности написания Bash-скриптов

  1. В первой строке всегда указывается интерпретатор, который будет выполнять скрипт.
    Помимо Bash вы также можете использовать другие интерпретаторы, например #!/bin/sh, #!/usr/bin/perl, #!/usr/bin/python и другие.
    Чтобы узнать путь к интерпретатору используйте команду which, например which python.
  2. Так как расширение файла не играет в Linux особой роли то приписывать .sh совсем не обязательно.
    Это делается для удобства самого пользователя.
  3. Слишком длинные команды вы можете разбить на несколько строк с помощью символа - \.
  4. Вне зависимости того в какой оболочке вы находитесь, будь это zsh, csh или любая другая, скрипт будет выполнять та оболочка, путь к которой указан в первой строке.