Bash-скрипты

Введение в bash-скрипты

Последнее обновление: 23.03.2024

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:~$ 
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850