путь к исполняемому файлу Bash
это массив, состоящий из 6 элементов, и содержащий информацию о версии Bash. Очень похожа на переменную $BASH_VERSION, описываемую ниже.
версия Bash, установленного в системе
Проверка переменной $BASH_VERSION — неплохой метод проверки типа командной оболочки, под которой исполняется скрипт. Переменная $SHELL не всегда дает правильный ответ.
содержимое вершины стека каталогов (который управляется командами pushd и popd)
Эта переменная соответствует команде dirs, за исключением того, что dirs показывает полное содержимое всего стека каталогов.
заданный по-умолчанию редактор, вызываемый скриптом, обычно vi или emacs.
"эффективный" идентификационный номер пользователя (Effective User ID)
Идентификационный номер пользователя, права которого были получены, возможно с помощью команды su.
![]() |
Значение переменной $EUID необязательно должно совпадать с содержимым переменной $UID. |
имя текущей функции
Перечень шаблонных символов, которые будут проигнорированы при выполнении подстановки имен файлов (globbing) .
группы, к которым принадлежит текущий пользователь
Это список групп (массив) идентификационных номеров групп для текущего пользователя, как эо записано в /etc/passwd.
домашний каталог пользователя, как правило это /home/username (см. Пример 9-13)
Сетевое имя хоста устанавливается командой hostname во время исполнения инициализирующих сценариев на загрузке системы. Внутренняя переменная $HOSTNAME Bash получает свое значение посредством вызова функции gethostname(). См. так же Пример 9-13.
тип машины
Подобно $MACHTYPE, идентифицирует аппаратную архитектуру.
разделитель полей во вводимой строке (IFS — Internal Field Separator)
Эта переменная управляет порядком выделения полей (задает символы-разделители) при разборе строки символов.
По-умолчанию — пробельный символ (пробел, табуляция и перевод строки), но может быть изменен, например, для разбора строк, в которых отдельные поля разделены запятыми. Обратите внимание: при составлении содержимого переменной $*, Bash использует первый символ из $IFS для разделения аргументов. См. Пример 5-1.
(Спасибо S. C., за разъяснения и примеры.)
Чаще всего устанавливается в .bashrc или /etc/profile, эта переменная задает порядок сортировки символов, в операциях подстановки имен файлов и в поиске по шаблону. При неверной настройке переменной LC_COLLATE можно получить весьма неожиданные результаты.
![]() |
Начиная с версии 2.05, Bash, в операциях подстановки имен файлов, не делает различий между символами верхнего и нижнего регистров, в диапазонах символов в квадратных скобках. Например,, ls [A-M]* выведет как File1.txt, так и file1.txt. Возврат к общепринятому стандарту поведения шаблонов в квадратных скобках выполняется установкой переменной LC_COLLATE в значение C командой export LC_COLLATE=C в файле /etc/profile и/или ~/.bashrc. |
Эта внутренняя переменная определяет кодировку символов. Используется в операциях подстановки и поиске по шаблону.
Номер строки исполняемого сценария. Эта переменная имеет смысл только внутри исполняемого сценария и чаще всего применяется в отладочных целях.
аппаратная архитектура
Идентификатор аппаратной архитектуры.
прежний рабочий каталог ("OLD-Print-Working-Directory")
тип операционной системы
путь поиска, как правило включает в себя каталоги /usr/bin/, /usr/X11R6/bin/, /usr/local/bin, и т.д.
Когда командный интерпретатор получает команду, то он автоматически пытается отыскать соответствующий исполняемый файл в указанном списке каталогов (в переменной $PATH). Каталоги, в указанном списке, должны отделяться друг от друга двоеточиями. Обычно, переменная $PATH инициализируется в /etc/profile и/или в ~/.bashrc (см. Глава 26).
Инструкция PATH=${PATH}:/opt/bin добавляет каталог /opt/bin в конец текущего пути поиска. Иногда может оказаться целесообразным, внутри сценария, временно добавить какой-либо каталог к пути поиска. По завершении работы скрипта, эти изменения будут утеряны (вспомните о том, что невозможно изменить переменные окружения вызывающего процесса).
![]() |
Текущий "рабочий каталог", ./, обычно не включается в $PATH из соображений безопасности. |
Код возврата канала (конвейера). Интересно, что это не то же самое, что код возврата последней исполненной команды.
![]() |
Переменная $PIPESTATUS может давать неверные значения при вызове из командной строки.
Если поместить эти строки в сценарий и исполнить его, то будут выведены верные значения 0 1 0. Спасибо Wayne Pollock за замечания и предоставленный пример. |
Переменная $PPID хранит PID (идентификатор) родительского процесса. [19]
Сравните с командой pidof.
Переменная хранит команду, которая используется непосредственно для вывода первичного приглашения к вводу — $PS1.
prompt, приглашение командной строки.
Вторичное приглашение командной строки, выводится тогда, когда от пользователя ожидается дополнительный ввод. Отображается как ">".
Третичное приглашение (prompt), выводится тогда, когда пользователь должен сделать выбор в операторе select (см. Пример 10-29).
Приглашение (prompt) четвертого уровня, выводится в начале каждой строки вывода тогда, когда сценарий вызывается с ключом -x. Отображается как "+".
рабочий (текущий) каталог
Аналог встроенной команды pwd.
переменная по-умолчанию, куда записывается ввод пользователя, выполненный с помощью команды read если явно не задана другая переменная. Так же может использоваться в операторе select, для построения меню выбора.
Время паботы сценария в секундах.
список допустимых опций интерпретатора shell. Переменная доступна только для чтения.
Уровень вложенности shell. Если в командной строке
Если переменная окружения $TMOUT содержит ненулевое значение, то интерпретатор будет ожидать ввод не более чем заданное число секунд, что, в первичном приглашении (см. описание PS1 выше), может привести к автоматическому завершению сеанса работы.
Начиная с версии 2.05b Bash, стало возможным использование $TMOUT в сценариях в комбинации с read.
Возможны и более сложные варианты организации организации ограничения времени ожидания ввода. Как один из вариантов, можно предложить организовать прерывание цикла ожидания по сигналу. Но это потребует написание функции обработки сигналов командой trap (см. Пример 29-5)
Пример 9-2. Ограничения времени ожидания ввода
В качестве альтернативы можно использовать stty.
Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя
Возможно самый простой способ — использовать опцию -t команды read.
user id number
UID (идентификатор) текущего пользователя, в соответствии с /etc/passwd
Это реальный UID текущего пользователя, даже если он временно приобрел права другого пользователя с помощью su. Переменная $UID доступна только для чтения.
Пример 9-5. Я — root?
См. также Пример 2-2.
![]() |
Переменные $ENV, $LOGNAME, $MAIL, $TERM, $USER и $USERNAME, не являются встроенными переменными Bash. Тем не менее, они часто инициализируются как переменные окружения в одном из стартовых файлов Bash. Переменная $SHELL, командная оболочка пользователя, может задаваться в /etc/passwd или в сценарии "init" и она тоже не является встроенной переменной Bash.
|
Позиционные параметры (аргументы)
аргументы передаются... из командной строки в сценарий, функциям или команде set (см. Пример 4-5 и Пример 11-14)
количество аргументов командной строки [20], или позиционных параметров (см. Пример 33-2)
Все аргументы (позиционные параметры), в виде одной строки (слова)
![]() |
"$*" — необходимо заключать в кавычки. |
То же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово), т.е. параметры не подвергаются какой либо интерпретации.
![]() |
"$@" — необходимо заключать в кавычки. |
Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@
После команды shift (сдвиг), первый аргумент, в переменной $@, теряется, а остальные сдвигаются на одну позицию "вниз" (или "влево", если хотите).
Специальная переменная $@ может быть использована для выбора типа ввода в сценария. Команда cat "$@" позволяет выполнять ввод как со стандартного устройства ввода stdin, так и из файла, имя которого передается сценарию из командной строки. См. Пример 12-20 и Пример 12-21.
![]() |
Переменные $* и $@, в отдельных случаях, могут содержать противоречивую информацию! Это зависит от содержимого переменной $IFS. |
Пример 9-7. Противоречия в переменных $* и $@
![]() |
Различия между $@ и $* наблюдаются только тогда, когда они помещаются в двойные кавычки. |
Пример 9-8. Содержимое $* и $@, когда переменная $IFS — пуста
Прочие специальные переменные
Список флагов, переданных сценарию (командой set). См. Пример 11-14.
![]() |
Эта конструкция изначально была введена в ksh, откуда перекочевала в Bash и, похоже, работает в Bash не совсем надежно. Единственное возможное применение — проверка - запущен ли сценарий в интерактивном режиме. |
PID последнего, запущенного в фоне, процесса
Специальная переменная, содержит последний аргумент предыдущей команды.
Код возврата команды, функции или скрипта (см. Пример 22-6)
PID самого процесса-сценария. Переменная $$ часто используется при генерации "уникальных" имен для временных файлов (см. Пример A-14, Пример 29-6, Пример 12-26 и Пример 11-24). Обычно это проще чем вызов mktemp.
[19] PID текущего процесса хранится в переменной $$.
[20] Слова "аргумент" и "параметр" очень часто используются как синонимы. В тексте данного документа, они применяются для обозначения одного и того же понятия, будь то аргумент, передаваемый скрипту из командной строки или входной параметр функции.
Последние комментарии