$ var=user1
$ var1=user2
$ echo $var1
user2
$ echo ${var}l
user11
$ echo ${var1:+"do you want to redefine var?"}
do you want to redefine var?
Для нормальной работы в UNIX ряд переменных должен быть определен и зависит от тех приложений, с которыми вы работаете. Приведем несколько наиболее употребительных переменных:
Имя |
Описание |
Возможное значение |
НОМЕ |
Каталог верхнего уровня пользователя |
/usr/'logname' [13] В данном примере утилита logname(1) выводит регистрационное имя пользователя, таким образом для пользователя andrei переменная НОМЕ примет следующее значение: /usr/andrei. |
PATH |
Поисковый путь |
/bin:/etc:/usr/bin:. |
MAIL |
Имя почтового ящика |
/usr/spool/mail/'logname' |
TERM |
Имя терминала |
ansi |
PS1 |
Первичное приглашение shell |
# |
PS2 |
Вторичное приглашение shell |
> |
Начальное окружение вашего сеанса устанавливается программой login(1) исходя из записей в файле паролей, и имеет следующий вид:
Переменная окружения |
Поле файла паролей |
HOME= домашний_каталог |
6 |
LOGNAME= зарегистрированное_имя |
1 |
PATH=/usr/bin: |
- |
SHELL= интерпретатор_сеанса |
7 |
MAIL=/var/mail/ зарегистрированное_имя |
1 |
TZ= временная_зона |
определено системой |
Переменная НОМЕ в основном используется в команде cd , которая служит для перехода в каталог:
$ pwd
/u/usr
$ cd some/new/directory
$ pwd
/u/usr/some/new/directorу
В результате текущим каталогом (команда pwd(1) выводит на терминал полное имя текущего каталога) становится /u/usr/some/new/directory. Вызов команды cd без параметра эквивалентен следующему вызову:
$ cd $HOME
который вернет вас в домашний каталог.
Переменная PATH служит для поиска командным интерпретатором запускаемых на выполнение программ, если их имя не содержит пути. Например, при запуске программы:
$ run
интерпретатор попытается найти файл runв каталогах пути поиска. В то же время при запуске программы runс указанием пути, переменная PATH использоваться не будет:
$ ./run
В последнем примере было задано относительное имя программы (относительно текущего каталога, обозначаемого точкой). Предполагается, что файл программы имеется в текущем каталоге, в противном случае shell выведет сообщение об ошибке.
Каталоги поиска в переменной PATH разделены символом ':'. Заметим, что текущий каталог поиска должен быть задан явно ('.'), shell не производит поиск в текущем каталоге по умолчанию.
Поиск запускаемых программ в текущем каталоге таит потенциальную опасность, поэтому для суперпользователя переменная PATH обычно инициализируется без '.'. Рассмотрим следующую ситуацию. Злоумышленник создает программу, наносящую вред системе (удаляющую файл паролей), помещает ее в каталог общего пользования, например в /tmp, открытый на запись всем пользователям системы, с именем ls. Известно, что в UNIX существует стандартная команда ls(1) (она обычно находится в каталоге /bin), выводящая на экран список файлов каталога. Допустим теперь, что администратор системы делает текущим каталог /tmpи хочет вывести список файлов данного каталога. Если текущий каталог ('.') расположен в пути поиска (переменной PATH) раньше каталога /bin, то выполнится программа, "подложенная" злоумышленником. Даже если текущий каталог указан последним в пути поиска, все равно существует вероятность, что вы захотите запустить команду, которая расположена в каталоге, не попавшем в переменную PATH, на самом деле вы можете запустить троянского коня.
Переменная MAIL определяет местоположение вашего почтового ящика, программы работы с электронной почтой используют эту переменную. Переменная MAIL инициализируется программой login(1) .
Переменная TERM содержит имя терминала и используется программами для доступа к базе данных терминалов . Обычно это программы, обеспечивающие полноэкранный режим работы, цвета и системы меню (редакторы, различные пользовательские оболочки). Поскольку наборы команд работы с различными терминалами отличаются друг от друга, используется специальная база данных, где хранятся конкретные команды для конкретного терминала.
Переменные PS1 и PS2 устанавливают первичное и вторичное приглашения командного интерпретатора. Первичное приглашение указывает на готовность интерпретатора к вводу команд. Значение этой переменной устанавливается при исполнении скрипта ( .profile) при входе пользователя в систему, и имеет вид "$" для обычных пользователей и "#" для суперпользователя. Однако вид приглашения легко изменить, соответствующим образом задав значение переменной PS1. Например, если вы хотите, чтобы в приглашении присутствовало имя хоста, на котором вы работаете, задайте значение PS1 следующим образом:
Читать дальше