Table of Contents
bash: first script
Что такое сценарии командной оболочки
Выражаясь простым языком, сценарий командной оболочки – это файл, содержащий последовательность команд. Командная оболочка читает этот файл и выполняет команды, как если бы они вводились вручную в командной строке.
Как написать сценарий командной оболочки
Чтобы успешно создать и запустить сценарий командной оболочки, нужно:
- Написать сценарий. Сценарии командной оболочки — это обычные текстовые файлы. Поэтому для их создания нам понадобится текстовый редактор. Лучше использовать текстовый редактор, обладающий функцией подсветки синтаксиса, позволяющей видеть элементы сценариев с цветной маркировкой. Подсветка синтаксиса помогает замечать некоторые типичные ошибки. Для создания сценариев хорошо подходят vim, gedit, kate и многие другие редакторы.
- Сделать сценарий выполняемым. Система не позволяет интерпретировать любой старый текстовый файл как программу, и небезосновательно! Поэтому, чтобы выполнить сценарий, файлу сценария нужно дать разрешения на выполнение
- Поместить сценарий в каталог, где командная оболочка сможет найти его. Командная оболочка автоматически ищет выполняемые файлы в нескольких каталогах, если путь к файлу не указан явно. Для максимального удобства мы будем помещать наши сценарии в такие каталоги.
Формат файла сценария
Следуя традициям программирования, напишем программу hello world, чтобы продемонстрировать чрезвычайно простой сценарий. Итак, запустите текстовый редактор и введите следующий сценарий:
#!/bin/bash # Это наш первый сценарий. echo 'Hello World!'
Первая строка в сценарии смотрится несколько необычно. Она похожа на комментарий, потому что начинается с символа <html>#</html>, но выглядит какой-то уж слишком специальной, чтобы быть комментарием. Последовательность символов <html>#!</html> — это на самом деле специальная конструкция, которая называется shebang (произносится как «шебанг») и сообщает системе имя интерпретатора, который должен использоваться для выполнения следующего за ним текста сценария. Каждый сценарий командной оболочки должен включать это определение в первой строке.
Сохраните файл сценария с именем <html>hello_world</html>.
Разрешения на выполнение
Далее сделаем сценарий исполняемым при помощи команды chmod:
ls -l hello_world -rw-r--r-- 1 nevvad nevvad 79 Jun 19 22:51 hello_world chmod 755 hello_world ls -l hello_world -rwxr-xr-x 1 nevvad nevvad 79 Jun 19 22:51 hello_world
Существует два распространенных набора разрешений для сценариев: 755 — для сценариев, которые должны быть доступны для выполнения всем, и 700 — для сценариев, которые могут выполняться только владельцами. Обратите внимание, что сценарии необходимо сделать доступными для чтения, чтобы их можно было выполнить.
Местоположение файла сценария
После установки разрешений попробуем запустить сценарий:
./hello_world Hello World!
Но чтобы это сделать, необходимо добавить явный путь перед его именем. В противном случае мы получим следующее сообщение:
hello_world
hello_world: command not found
В чем причина? Чем наш сценарий отличается от других программ? Как оказывается, ничем. У нас замечательный сценарий. Его проблема – местоположение.
Коротко напомним, что система просматривает каталоги по списку всякий раз, когда требуется найти исполняемую программу, если путь к ней не указан явно. Именно так система выполняет программу <html>/bin/ls</html>, если мы вводим ls в командной строке. Каталог <html>/bin</html> – один из каталогов, которые система просматривает автоматически. Список каталогов хранится в переменной окружения PATH. Она содержит список каталогов, перечисленных через двоеточие. Увидеть, что содержится в PATH, можно с помощью команды:
echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Как видите, это просто список каталогов. Если поместить сценарий в любой из этих каталогов, проблема будет решена.
В большинстве дистрибутивов Linux в переменную PATH включается каталог <html>bin</html> в домашнем каталоге пользователя, чтобы дать пользователям возможность выполнять собственные программы. То есть если создать каталог </html>bin</html> и поместить сценарий в него, его можно будет запускать как любые другие программы:
mkdir bin mv hello_world /bin mv hello_world bin/
Если каталог отсутствует в переменной PATH, его легко туда добавить, включив следующую строку в файл <html>.bashrc</html>:
export PATH=~/bin:"$PATH"
Это изменение будет действовать в каждом последующем сеансе работы с терминалом. Чтобы применить изменения в текущем сеансе, нужно заставить командную оболочку повторно прочитать файл <html>.bashrc</html>, например, так:
. .bashrc
Команда «точка» <html>.</html> является синонимом <html>source</html>, встроенной команды, которая читает указанный файл и интерпретирует его как ввод с клавиатуры.
Настройка vim для разработки сценариев
Текстовый редактор vim имеет много, очень много параметров настройки. Некоторые из них можно использовать для подготовки редактора к разработке сценариев. Следующая команда:
:syntax on
Включает подсветку синтаксиса. С этой настройкой редактор будет отображать синтаксические элементы сценариев разным цветом. Это помогает выявлять некоторые виды ошибок. И конечно же, выглядит очень круто. Обратите внимание,
что для работы этой настройки должна быть установлена полная версия vim, а редактируемый файл должен содержать строку шебанг (shebang), сообщающую, что файл является сценарием командной оболочки. Если с этой командой возникнут
сложности, попробуйте настройку <html>:set syntax=sh</html>.
Следующая команда:
:set hlsearch
Включает подсветку результатов поиска. Например, если выполнить поиск слова echo с этой настройкой, редактор выделит все вхождения искомого слова.
Следующая команда:
:set tabstop=4
Определяет число колонок (знакомест), занимаемых символом табуляции. По умолчанию один символ табуляции занимает восемь знакомест. Присвоив этому параметру значение 4 (которое широко используется практикующими программистами), вам проще будет уместить длинные строки на экране.
Следующая команда:
:set autoindent
Включает автоматическое оформление отступов. Этот параметр заставляет vim добавлять в новую строку отступ, как в строке выше. Это ускоряет ввод многих видов программных конструкций. Чтобы прекратить автоматическое выравнивание, достаточно нажать комбинацию CTRL+D.
Эти изменения можно сделать постоянными, добавив описанные команды (без начального двоеточия) в файл <html>~/.vimrc</html>.
Выбор местоположения для сценариев
Каталог <html>~/bin</html> хорошо подходит для сценария, если этот сценарий предназначен для личного использования. Сценарии, которые должны быть доступны всем пользователям в системе, лучше размещать в традиционном месте – в каталоге <html>/usr/local/bin</html>.
Сценарии, предназначенные для использования системным администратором, часто помещаются в каталог <html>/usr/local/sbin</html>. В большинстве случаев программное обеспечение, созданное в локальной системе, будь то сценарии или скомпилированные программы, следует помещать в иерархию каталогов <html>/usr/local</html>, а не <html>/bin</html> или <html>/usr/bin</html>. Последние два каталога, как определено стандартом иерархии файловой системы Linux (Linux Filesystem Hierarchy Standard), предназначены только для файлов, поставляемых создателями дистрибутива Linux.