Предположим, что вы часто используете серию команд и хотели бы сократить объем постоянной печати за счет группировки их в одну команду. Например, команды
/home/larry# cat chapter1 chapter2 chapter3 > book
/home/larry# wc -l book
/home/larry# lp book
об'единяют файлы, содержащие
главы книги: chapter1
, chapter2
, chapter3
и помещают результат в файл book
. Затем подсчитывается число строк
в книге (в файле book
) и отображается на дисплее и, наконец, печатается
командой lp
.
Вместо введения каждый раз этих команд, вы можете собрать их в один сценарий (командный файл). Сценарии shell мы кратко опишем в Разделе 3.13.1. А сценарий, который выполнит вышеприведенные команды, будет выглядеть следующим образом
#!/bin/sh
# A shell script to create and print the book
cat chapter1 chapter2 chapter3 > book
wc -l book
lp book
Если этот сценарий будет
помещен в файл makebook
, то вы можете просто использовать далее
команду
/home/larry# makebook
которая выполнит все команды
сценария. Сценарии shell - это обычные текстовые файлы, которые вы можете создавать
с помощью редактора вроде emacs
или vi
. (vi
обсуждался в Разделе 3.12)
Давайте посмотрим на этот
сценарий. Первая строка ``#!
bin/sh/'' говорит о том, что этот файл
есть сценарий и сообщает shell, как выполнить сценарий. В данном случае необходимо
передать сценарий для выполнения команде bin/sh/, где bin/sh/ - сама программа
shell. Почему это важно? В большинстве систем UNIX bin/sh/ - это shell Баурновского
типа, например bash
. Инициируя работу сценария shell выполняется,
используя bin/sh/, при этом мы гарантируем, что сценарий будет выполняться именно
под shell Баурновского типа (а не, скажем, под C shell). Этот сценарий будет
выполняться под shell Баурна, даже если вы используете Tcsh (или какой-то другой
C shell) как свою рабочую оболочку.
Вторая строка представляет
из себя комментарий. Комментарии начинаются символом ``#
'' и могут
продолжаться до конца строки - они игнорируются shell и могут использоваться
программистом для пояснений.
Остальные строки сценария - обычные команды в том виде, в каком бы вы их вводили прямо на выполнение. Shell читает каждую строку сценария и выполняет эту строку, как будто вы ввели эту строку в ответ на подсказку shell.
Права доступа важны для
сценариев. Если вы создали сценарий, вы должны убедиться, что вы имеете права
на его выполнение.
/home/larry# chmod u+x makebook
чтобы дать самому себе разрешение
на выполнение shell-сценария makebook
.