Bash-скрипт или shell-скрипт представляет текстовый файл, который содержит последовательность команд. По сути, все, что может запускать несколько команд, можно считать shell-скриптом.
Создадим простейший shell-скрипт. Для этого создадим в домашнем каталоге обычный текстовый файл, который назовем hello:
eugene@Eugene:~$ touch hello
При выборе имени скрипта следует учитывать, что оно должно быть уникально. Не должно быть команд с тем же именем, иначе будет выполняться команда, а не shell-скрипт
(если только вы не укажете перед именем скрипта префикс ./). В данном случае я назвал скрипт "hello", так как у меня в системе нет команд, которые называются аналогично. Чтобы убедиться в уникальности имени, можно выполнить команду
which hello
, которая попытается найти расположение файла команды hello, если он существует.
После создания файла hello определим в нем следующее содержимое:
#!/bin/bash # скрипт, который выводит на консоль строку hello METANIT.COM # для запуска перейдите в каталог скрипта и введите команду ./hello echo hello METANIT.COM exit 0
Разберем скрипт. В первой строке скрипта стоит shebang
#!/bin/bash
Этот элемент сценария сообщает оболочке, в которой будет выполняться этот скрипт, какую подоболочку следует выполнить для запуска этого сценария. shebang всегда начинается с #!. А далее следует имя подоболочки, которая должна выполнить скрипт. Так, в примере выше в качестве подоболочки применяется /bin/bash, но в реальности это может быть любая другая оболочка. В принципе скрипт может не включать в себя shebang, и во многих случаях такой скрипт равно будет работать. Однако если пользователь попытается в ней запустить скрипт без shebang в оболочке, отличной от /bin/bash, то он скорее всего потерпит неудачу. Поэтому лучше всегда добавлять shebang.
После shebang идут две строки комментария
# скрипт, который выводит на консоль строку hello METANIT.COM # для запуска перейдите в каталог скрипта и введите команду ./hello
Комментарии начинаются с символа решетки #. Комментарии не выполняются и просто дают читающему представление о том, что делает скрипт или его отдельные строки. Стоит отметить, что строка с shebang также начинается с символа решетки, однако поскольку это первая строка и за символом решетки идет восклицательный знак ! - #!, то система воспринимает первую строку именно как shebang, а не как комментарий.
После комментариев идут собственно выполняемые команды:
echo hello METANIT.COM exit 0
Первая из этих строк с помощью команды echo выводит на консоль сообщение "hello METANIT.COM".
Последняя строка - это команда exit
, которая завершает скрипт и затем сообщает родительской оболочке, как был выполнен скрипт. Использование этой команды в скрипте - это хорошая практика. Этой команде
передается числовой код, который указывает, как завершился скрипт. Если этот код равен 0 (как в примере выше), то это означает, что скрипт выполнен успешно.
Если же числовой код равен не 0, а какому-то другому числу, то это будет означать, что возникла проблема.
В более сложных сценариях можно использовать разные числовые коды, чтобы указать, что определенное условие не выполнено.
Есть несколько способов выполнить shell-скрипт:
Сделать скрипт исполняемым и запустить как обычную программу
Запустить скрипт как аргумент программы bash
Сделать скрипт исполняемым и запустить как обычную программу
Итак, воспользуемся первым способом и запустим наш скрипт hello как исполняемое приложение
eugene@Eugene:~$ chmod +x hello eugene@Eugene:~$ ./hello hello METANIT.COM eugene@Eugene:~$
В данном случае команда chmod +x hello
делает скрипт исполняемым.
ПРи втором способе передаем скрипт команде bash:
eugene@Eugene:~$ bash hello hello METANIT.COM eugene@Eugene:~$
Третий способ запуска скрипта предполагает включение скрипта в текущую оболочку. Это может быть полезно, если скрипт содержит переменные, которые надо сделать активными в текущей оболочке. Существует два способа подобного вызова скрипта:
. имя_скрипта source имя_скрипта
Стоит учитывать, что если скрипт использует команду exit
для завершения, то она закрывает текущую оболочку. Поэтому закомментируем в скрипте последнюю строку:
#!/bin/bash # скрипт, который выводит на консоль строку hello METANIT.COM # для запуска перейдите в каталог скрипта и введите команду ./hello echo hello METANIT.COM # exit 0
И вызовем скрипт одним из способов:
eugene@Eugene:~$ . hello hello METANIT.COM eugene@Eugene:~$ source hello hello METANIT.COM eugene@Eugene:~$