Некоторые переменные среды являются зарезервированными словами, которые использует интерпретатор shell. Их значения устанавливаются, когда вы регистрируетесь в системе. Другие переменные используются различными другими частями системы UNIX. Имея под рукой полный список, вы можете убедиться, что все необходимые переменные определены. Имена переменных могут варьироваться в System V, BSD и XENIX. Здесь приведены имена для System V.
Эти shell-переменные являются частью среды вашего регистрационного интерпретатора shell. Они хранятся в виде символьных строк, и если уж они установлены, от них нельзя избавиться. Только переустановка их значений на пустые строки может исключить их присутствие. Когда меняются значения переменных, новые значения локальны для текущего интерпретатора shell до тех пор, пока они не будут экспортированы.
CDPATH | Строка поиска, определяющая, куда вы можете перейти с помощью команды cd |
HOME | Место хранения ваших файлов в системном дереве |
IFS | Внутренний разделитель полей, который определяет символы, разделяющие слова между собой |
LOGNAME | Ваше регистрационное имя, определенное в /etc/passwd |
Определяет местонахождение вашего почтового ящика, чтобы вас можно было оповестить о поступлении вам новой почты | |
PATH | Определяет порядок и имена каталогов для поиска исполняемых модулей |
PS1 | Главная строка подсказки, которая отображается в качестве вашего обычного приглашения |
PS2 | Вторичная строка подсказки, которая отображается, когда интерпретатору shell нужен дополнительный ввод |
TERM | Строка, определяющая ваш тип терминала |
TERMCAP | Устанавливается либо на файл описания терминала, либо на запись этого файла |
TZ | Зона времени, понимаемая так, как описано в ctime(3) |
SHELL | Имя shell-интерпретатора, который вы запускаете |
EXINIT | Строка инициализации для редактора ex |
Shell выполняет определенную последовательность действий по интерпретации команд для каждой прочитанной им строки. Зная эту последовательность, вы можете изолировать многие проблемы на соответствующем уровне. Иногда на определенном шаге этой последовательности могут появиться странные вхождения символов. Поэтому важно знать, когда изменяются значения переменных.
Один из примеров относится к раскрытию имени файла и символу звездочки. Shell НЕ раскрывает метасимволы во время присвоения значений. Оператор F=* означает в действительности, что переменной F присваивается один символ. Когда выполняется шаг 7 последовательности действий, звездочка раскрывается как метасимвол имени файла, превращаясь во все имена файлов в текущем каталоге. Это можно продемонстрировать на примере команды "echo $F". Для того чтобы сохранить литеральное значение звездочки, вам нужно экранировать ее, что защитит ее от шага 7. Получается команда echo "$F". А для того чтобы вообще подавить значение переменной F, вам следует исключить шаг 3 - подстановку параметров. Указывая команду echo '$F', вы печатаете буквы $F, а не значение переменной F.
Действия выполняются в таком порядке:
Далее эти шаги рассматриваются более подробно. Когда вы программируете на языке shell, попытайтесь представить себе, какой шаг вы используете для каждой строки текста программы. Возможно, вы путаете два-три шага между собой. Зная порядок шагов, вы можете проще определять эффект от действия ваших команд и сокращать число возможных ошибок.
Приведенные здесь символы рассматриваются shell-переменными как специальные, так как они означают завершение слова. Для того чтобы использовать символ в его обычном значении, а не в качестве специальной функции, нужно экранировать его обратной косой чертой (\) или взять в одинарные кавычки.
\b | Пробел: код 20 (шестнадцатеричный), ограничитель слов |
\n | Символ новой строки: ^j, код A (шестнадцатеричный), ограничитель слов |
\t | Табуляция: ^i, код 9, ограничитель слов |
; | Точка с запятой: завершает программный конвейер |
( | Левая скобка: ограничивает подчиненный shell |
) | Правая скобка: ограничивает подчиненный shell |
| | Вертикальная черта, или символ программного конвейера: разделяет команды |
^ | Стрелка вверх, знак вставки: старый символ, используемый в качестве | |
> | Правая угловая скобка (знак больше): переназначает стандартный вывод |
< | Левая угловая скобка (знак меньше): переназначает стандартный ввод |
& | Амперсанд: вызывает асинхронное (фоновое) выполнение |
{ | Левая фигурная скобка: очерчивает слово для первоначального разбора слова |
} | Правая фигурная скобка: завершает знак очерчивания слова |
Эти символы встречаются в синтаксисе операторов языка shell. Их следует рассматривать как зарезервированные. Отдельные символы могут использоваться по-разному. Например, символ # является комментарием в операторе, а также может быть параметром, как в записи $#, означающей количество аргументов в командной строке.
&& | Двойной амперсанд: выполнить список, если программный конвейер отработал успешно |
|| | Двойная вертикальная черта: выполнить список в случае неудачи программного конвейера |
` | Знак ударения: перехватить стандартный вывод в команде |
* | При использовании в качестве параметра соответствует всем позиционным параметрам; является также символом генерации имен файлов, соответствующим любой строке |
# | Комментарий до конца строки; соответствует также количеству позиционных параметров в командной строке |
? | При использовании в качестве параметра соответствует статусу завершения последней синхронно выполненной команды; используется также при генерации имен файлов и означает при этом любой одинарный символ |
- | Обозначает флаги, влияющие на функционирование интерпретатора shell |
$ | Вводит заменяемые параметры; соответствует также идентификатору процесса |
! | При использовании в качестве параметра соответствует идентификатору процесса последнего фонового задания; применяется также в команде проверки, где означает "не" |
" | Двойная кавычка: окаймляет символы и разрешает производить подстановку параметров |
' | Одинарная кавычка: окаймляет символы, но запрещает подстановку параметров |
\ | Обратная наклонная черта: экранирует одиночный символ, чтобы снять его специальное значение |
[] | Альтернативное использование для вызова команды проверки. Применяется также при генерации имен файлов, означая при этом диапазон символов |
@ | Соответствует каждому позиционному параметру командной строки |
>> | Дополнить стандартный вывод |
<< | Переназначить стандартный ввод на вводимые строки текста |
& | Используется как символ фонового процесса; соответствует также "файловому дескриптору", если используется в переадресации |
Перечисленные ниже команды употребляются в программах на языке shell. Здесь имеется в виду System V Bourne shell.
В System V.2 - более новой версии System V - интерпретатор shell имеет некоторые дополнительные команды, перечисленные в отдельном списке.
Имеется также интерпретатор ksh (фактически это улучшенный Bourne shell), обладающий возможностями командных строк, характерными для csh (Си-shell). Интерпретатор ksh здесь не рассматривается.
ПРИМЕЧАНИЕ. Не позволяйте команде exec сбить вас с толку. Это не то же самое, что команда exec(2). Данная команда exec обрабатывается интерпретаторм shell, а exec(2) является системным вызовом.
. | Точка: запустить данную команду из текущего интерпретатора shell, а не из порождаемого |
: | Двоеточие: ничего не делать, а только возвратить успешный статус (0) |
{} | Фигурные скобки: запустить последовательный список команд |
break | Оборвать следующую итерацию текущего цикла |
case | Многократный выбор if-then-else |
cd | Сменить каталог |
continue | Перейти на следующую итерацию цикла for, while или until |
eval | Выполнить еще раз этап подстановки переменных |
exec | Выполнить команду с аргументами, перекрывая текущий shell |
exit | Остановить выполнение текущего командного файла |
export | Отправить значение переменной всем подчиненным интерпретаторам shell |
for | Управляющее слово в цикле for-do-done |
if | Управляющее слово в последовательности if-then-else |
newgrp | Изменить текущий идентификатор группы |
read | Одну строку стандартного ввода присвоить переменной в качестве значения |
readonly | Объявить переменную только для чтения, ее значение изменять нельзя |
set | Включение и выключение флагов конфигурации shell |
shift | Убрать позиционный параметр из командной строки |
test | Вычислить взаимосвязи между строками и целыми числами |
times | Печатать время работы процессов, запущенных из shell |
trap | Определить обработчики прерываний для конкретных сигналов |
ulimit | Установить предел размера файлов в 512-байтных блоках |
umask | Маска прав доступа к файлам, используемая при их создании |
until | Управляющее слово в цикле until-do-done |
wait | Shell ждет завершения указанных порожденных процессов |
while | Управляющее слово в цикле while-do-done |
hash | При поиске команд использовать хэширование |
name | Определить имя shell-функции |
pwd | Сообщить текущий каталог; теперь это встроенная команда для ускорения |
return | Выйти из shell-функции и возвратить значение |
set -f | Запретить фазу генерации имен файлов |
set -h | Сохранить, а не выполнять функциональные команды, если они определены |
type | Определить, каким образом можно интерпретировать имя в качестве команды |
unset | Удалить shell-переменные и функции |