Шрифт:
Поскольку в системе могут существовать скрипты для различных интерпретаторов, имя интерпретирующей команды обычно помещается в первой строке следующим образом:
В данном случае последующий текст скрипта будет интерпретироваться Bourne shell. Заметим, что при запуске скрипта из командной строки (для этого он должен обладать правом на выполнение — x), будет запущен новый командный интерпретатор, ввод команд для которого будет выполняться из файла скрипта.
Переменные
В командной строке или скрипте командного интерпретатора можно определить и использовать переменные. Значением переменной является строка, которая передается присвоением:
где var — имя переменной, a value — ее значение.
Значение переменной можно получить, используя знак. Например, вывести значение переменной name на экран можно с помощью команды echo следующим образом:
Так же можно присвоить другой переменной (name1) значение переменной name:
Значение переменной можно присвоить иначе. Поскольку значение представляет собой строку, shell предоставляет удобный способ генерации строк из потока вывода команды. Синтаксис присвоения при этом следующий:
Так, например, где var — имя переменной, a command — название команды, команда pwd(1) выводит строку со значением текущего каталога:
Можно присвоить переменной cdir значение текущего каталога, которое сохранится в ней:
При использовании переменной, например var, командный интерпретатор подставляет вместо $var ее значение. Более сложные синтаксические конструкции получения значения переменной приведены в табл. 1.7.
Таблица 1.7. Способы получения значения переменной
$var | Значение var; ничего, если переменная var не определена |
${var} | То же, но отделяет имя переменной var от последующих символов |
${var:-string} | Значение var, если определено; в противном случае — string. Значение var при этом не изменяется |
${var:=string} | То же, но если переменная var не определена, ей присваивается значение строки string |
${var:?string} | Если переменная var не определена, выводится строка string и интерпретатор прекращает работу. Если строка string пуста, то выводится сообщение var: parameter not set |
${var:+string} | Строка string, если переменная var определена, в противном случае — ничего |
Приведем несколько примеров, используя команду echo:
Для нормальной работы в UNIX ряд переменных должен быть определен и зависит от тех приложений, с которыми вы работаете. Приведем несколько наиболее употребительных переменных:
Имя | Описание | Возможное значение |
---|---|---|
НОМЕ | Каталог верхнего уровня пользователя | /usr/'logname' [13] |
PATH | Поисковый путь | /bin:/etc:/usr/bin:. |
Имя почтового ящика | /usr/spool/mail/'logname' | |
TERM | Имя терминала | ansi |
PS1 | Первичное приглашение shell | # |
PS2 | Вторичное приглашение shell | > |
13
В данном примере утилита logname(1) выводит регистрационное имя пользователя, таким образом для пользователя andrei переменная НОМЕ примет следующее значение: /usr/andrei.
Начальное окружение вашего сеанса устанавливается программой login(1) исходя из записей в файле паролей, и имеет следующий вид:
Переменная окружения | Поле файла паролей |
---|---|
HOME=домашний_каталог | 6 |
LOGNAME=зарегистрированное_имя | 1 |
PATH=/usr/bin: | – |
SHELL=интерпретатор_сеанса | 7 |
MAIL=/var/mail/зарегистрированное_имя | 1 |
TZ=временная_зона | определено системой |