Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 10:

Командные процессоры

< Лекция 9 || Лекция 10: 123456789

Предопределенные переменные

Предопределенные переменные содержатся в среде окружения командного процессора независимо от установок, которые может сделать пользователь в стартовых скриптах. Имена предопределенных переменных среды окружения во всех командных процессорах, кроме csh (и, в некоторых случаях, tcsh ), пишутся символами верхнего регистра: PATH, USER, TERM, PS1, PS2.

В именах переменных среды окружения используются буквы латинского алфавита. пользовательские, добавленные по ходу работы переменные в скриптах принято называть именами из символов нижнего регистра для того, чтобы отличать переменные, введенные разработчиком системы, от тех, что вводит пользователь или требует прикладная программа.

В любых командных процессорах обязательно заранее определены переменные, указанные в таблице 10.5.

Таблица 10.5. Предопределенные переменные
Переменная Смысл
HOME домашний каталог пользователя
SHELL текущий shell
PS1 вид приглашения shell'a
PS2 вид приглашения "продолжение команды"
TERM тип терминала пользователя
USER или LOGNAME имя пользователя
PATH список каталогов, в которых надо искать исполняемый файл, когда пользователь запускает программу, указывая только ее имя, но не путь. Каталоги разделяются двоеточиями

С другой стороны, многие другие переменные определяются не во всех командных процессорах. Посмотреть список всех переменных среды окружения обычно можно по команде

set

Любой скрипт может быть вызван с аргументами, которые в скрипте называются позиционными параметрами. К аргументам с первого по девятый следует обращаться как к $1..$9. Значение $0 - это имя самого скрипта, по которому его вызвали. Один и тот же скрипт может быть вызван с разными именами, например, если с ним установлены символические связи (symbolic links).

Команда shift n ( n - положительное или отрицательное смещение) позволяет двигать "окошко" $1..$9 по всему массиву аргументов скрипта вперед и назад, если аргуменов больше девяти. Shift без параметров эквивалентен shift 1. В csh shift умеет сдвигать "окно" только на одну позицию вперед.

Кроме вышеописанных переменных обычно определены следующие:

Переменная Смысл
$ номер процесса текущего shell'a
* все позиционные параметры
_ последняя вызванная команда
1,2,..9 один позиционный параметр
? число позиционных параметров

Подстановка имен файлов. Шаблоны

При запуске программ из командной строки часто требуется передать им в качестве аргументов одно или несколько имен файлов. Эти имена удобно задать шаблоном - например, /var/log/messages.?, что означает все файлы из каталога /var/log, имена которых начинаются на messages., а завершаются любым символом. Любой командный процессор умеет подставлять в командную строку имена файлов, соответствующие шаблону:

ls -l /var/log/messages.?

Символ "?" трактуется командным процессором как шаблон, которому соответствует один любой символ.

Обратите внимание на то, что командный процессор не понимает регулярных выражений. Его шаблоны похожи на регулярные выражения, но это - две совершенно разные вещи. Для обработки регулярных выражений в любом приложении используется стандартная функция regex, а шаблоны имен файлов командный процессор обрабатывает по-своему.

Командный процессор распознает и интерпретирует следующие символы в шаблонах (такие символы называются метасимволами, metasymbols или wildcards):

* любая подстрока, в том числе пустая.
? один любой символ.
[...] один любой символ из списка (например, [avgf] ) или диапазона (например, [a-z] ).

Порядок подстановки имен файлов по шаблону таков: вначале командный процессор находит все файлы, имена которых соответствуют шаблону, а затем подставляет имена всех этих файлов через пробел в строку в то место, где был написан шаблон.

Таким образом, если в текущем каталоге есть файлы money.c, money.bak, money.obj и wallet.x, то команда

ls -l mon*

будет раскрыта в

ls -l money.c money.bak money.obj
< Лекция 9 || Лекция 10: 123456789