Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 13 декабря 2014 г.
Глава 12. Переменные командной оболочки
В данной главе мы познакомимся с методикой работы с переменными окружения
с использованием командной оболочки. Эти переменные
обычно требуются для работы приложений.
Символ доллара ($)
Еще одним важным интерпретируемым командной оболочкой символом является символ доллара $
. Командная оболочка будет искать переменную окружения
с именем, соответствующим размещенной после символа доллара
строке, и заменять данный символ и имя переменной на значение этой переменной (или ни на что в том случае, если переменной не существует).
[paul@RHELv4u3 ~]$ echo Это командная оболочка $SHELL Это командная оболочка /bin/bash [paul@RHELv4u3 ~]$ echo Данная командная оболочка $SHELL используется на компьютере $HOSTNAME Данная командная оболочка /bin/bash используется на компьютере RHELv4u3.localdomain [paul@RHELv4u3 ~]$ echo Идентификатор пользователя $USER равен $UID Идентификатор пользователя paul равен 500 [paul@RHELv4u3 ~]$ echo Моей домашней директорией является директория $HOME Моей домашней директорией является директория /home/paul
Зависимость от регистра
[paul@RHELv4u3 ~]$ echo Привет $USER Привет paul [paul@RHELv4u3 ~]$ echo Привет $user Привет
Создание переменных
$MyVar
с последующей установкой ее значения. После этого в примере используется команда echo
для проверки значения созданной переменной.
[paul@RHELv4u3 gen]$ MyVar=555 [paul@RHELv4u3 gen]$ echo $MyVar 555 [paul@RHELv4u3 gen]$
Кавычки
[paul@RHELv4u3 ~]$ MyVar=555 [paul@RHELv4u3 ~]$ echo $MyVar 555 [paul@RHELv4u3 ~]$ echo "$MyVar" 555 [paul@RHELv4u3 ~]$ echo '$MyVar' $MyVar
paul@laika:~$ city=Burtonville paul@laika:~$ echo "Сейчас мы находимся в городе $city." Сейчас мы находимся в городе Burtonville. paul@laika:~$ echo ' Сейчас мы находимся в городе $city.' Сейчас мы находимся в городе $city.
Команда set
Вы можете использовать команду set
для вывода списка переменных окружения. В системах Ubuntu и Debian команда set
также выведет список функций командной оболочки после списка переменных командной оболочки. Поэтому для ознакомления со всеми элементами списка переменных окружения при работе с данными системами рекомендуется использовать команду set | more
.
Команда unset
unset
для удаления переменной из вашего окружения командной оболочки.
[paul@RHEL4b ~]$ MyVar=8472 [paul@RHEL4b ~]$ echo $MyVar 8472 [paul@RHEL4b ~]$ unset MyVar [paul@RHEL4b ~]$ echo $MyVar [paul@RHEL4b ~]$
Переменная окружения $PS1
Переменная окружения $PS1
устанавливает формат приветствия вашей командной оболочки. При вводе строки форматирования вы можете использовать обратный слэш для экранирования таких специальных символов, как символ \u
, предназначенный для вывода имени пользователя, или \w
, предназначенный для вывода имени рабочей директории. На странице руководства командной оболочки bash
представлен полный список специальных символов.
$PS1
.
paul@deb503:~$ PS1=приглашение приглашение приглашениеPS1='приглашение ' приглашение приглашение PS1='> ' > > PS1='\u@\h$ ' paul@deb503$ paul@deb503$ PS1='\u@\h:\W$' paul@deb503:~$
.bashrc
для использования зеленого цвета в приглашениях, выводимых обычным пользователям.
# цветное приглашение командной оболочки, созданное paul RED='\[\033[01;31m\]' WHITE='\[\033[01;00m\]' GREEN='\[\033[01;32m\]' BLUE='\[\033[01;34m\]' export PS1="${debian_chroot:+($debian_chroot)}$GREEN\u$WHITE@$BLUE\h$WHITE\w\$ "
Переменная окружения $PATH
$PATH
устанавливает директории файловой системы, в которых командная оболочка ищет бинарные файлы, необходимые для исполнения команд (за исключением тех случаев, когда команда является встроенной или представлена псевдонимом команды). Данная переменная содержит список путей к директориям с символами двоеточия в качестве разделителей.
[[paul@RHEL4b ~]$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:
[paul@RHEL4b ~]$ PATH=$PATH:. [paul@RHEL4b ~]$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:. [paul@RHEL4b ~]$
su -
, так как последняя команда позволяет дополнительно использовать значения переменных окружения целевого пользователя. К примеру, в представленный значением переменной $PATH список директорий пользователя root обычно добавляются директории /sbin
.
[paul@RHEL3 ~]$ su Password: [root@RHEL3 paul]# echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin [root@RHEL3 paul]# exit [paul@RHEL3 ~]$ su - Password: [root@RHEL3 ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin: [root@RHEL3 ~]#
Команда env
Команда env
в случае использования без параметров выведет список экспортированных переменных окружения
. Отличие данной команды от команды set
с параметрами заключается в том, что команда set
выводит список всех переменных окружения, включая те переменные, которые не экспортируются в дочерние командные оболочки.
Кроме того, команда env
может также использоваться для запуска "чистой" командной оболочки (командной оболочки без наследования какого-либо окружения). Команда env -i
позволяет очистить окружение дочерней командной оболочки.
bash
установит значение переменной окружения $SHELL
при запуске.
[paul@RHEL4b ~]$ bash -c 'echo $SHELL $HOME $USER' /bin/bash /home/paul paul [paul@RHEL4b ~]$ env -i bash -c 'echo $SHELL $HOME $USER' /bin/bash [paul@RHEL4b ~]$
env
для установки значения переменной $LANG
или любой другой переменной окружения одного экземпляра командной оболочки bash
в рамках одной команды. В примере ниже данная возможность используется для демонстрации влияния значения переменной $LANG
на работу механизма поиска файлов по шаблонам (для получения дополнительной информации о данном механизме следует обратиться к главе, посвященной поиску файлов по шаблонам).
[paul@RHEL4b test]$ env LANG=C bash -c 'ls File[a-z]' Filea Fileb [paul@RHEL4b test]$ env LANG=en_US.UTF-8 bash -c 'ls File[a-z]' Filea FileA Fileb FileB [paul@RHEL4b test]$
Команда export
export
. В примере ниже с помощью данной команды осуществляется экспорт переменной окружения в дочерние командные оболочки.
[paul@RHEL4b ~]$ var3=три [paul@RHEL4b ~]$ var4=четыре [paul@RHEL4b ~]$ export var4 [paul@RHEL4b ~]$ echo $var3 $var4 три четыре [paul@RHEL4b ~]$ bash [paul@RHEL4b ~]$ echo $var3 $var4 четыре
[paul@RHEL4b ~]$ export var5=пять [paul@RHEL4b ~]$ echo $var3 $var4 $var5 четыре пять [paul@RHEL4b ~]$ exit exit [paul@RHEL4b ~]$ echo $var3 $var4 $var5 три четыре [paul@RHEL4b ~]$
Разграничения переменных
[paul@RHEL4b ~]$ prefix=Super [paul@RHEL4b ~]$ echo Привет $prefixman и $prefixgirl Привет и [paul@RHEL4b ~]$ echo Привет ${prefix}man и ${prefix}girl Привет Superman и Supergirl [paul@RHEL4b ~]$
Несвязанные переменные
$MyVar
, но она не является успешной ввиду того, что переменной не существует. По умолчанию командная оболочка не будет выводить ничего в том случае, если переменная не связана (ее не существует).
[paul@RHELv4u3 gen]$ echo $MyVar [paul@RHELv4u3 gen]$
nounset
, который вы можете использовать для генерации ошибки в том случае, если используемой переменной не существует.
paul@laika:~$ set -u paul@laika:~$ echo $Myvar bash: Myvar: unbound variable paul@laika:~$ set +u paul@laika:~$ echo $Myvar paul@laika:~$
В командной оболочке bash команда set -u
идентична команде set -o nounset
и, по аналогии, команда set +u
идентична команде set +o nounset
.
Практическое задание: переменные командной оболочки
-
1. Используйте команду echo для вывода строки "Привет", после которой должно следовать ваше имя. (Используйте переменную командной оболочки bash!)
-
2. Создайте переменную
answer
, значение которой равно 42. -
3. Скопируйте значение переменной $LANG в значение переменной $MyLANG.
-
4. Выведите список используемых в данное время переменных командной оболочки.
-
5. Выведите список всех экспортируемых переменных командной оболочки.
-
6. Присутствует ли информация о вашей переменной в выводе команд
env
иset
? -
7. Уничтожьте вашу переменную
answer
. -
8. Создайте две переменные и
экспортируйте
одну из них. -
9. Выведите значение экспортированной переменной в дочерней интерактивной командной оболочке.
-
10. Создайте переменную и присвойте ей значение 'Dumb', после чего аналогичным образом создайте другую переменную с значением 'do'. Используйте команду
echo
и две созданные переменные для вывода слова 'Dumbledore'. -
11. Найдите список экранированных с помощью обратного слэша управляющих символов на странице руководства командной оболочки bash. Добавьте управляющий символ в значение переменной
PS1
для вывода времени в приветствии командной оболочки.
Корректная процедура выполнения практического задания: переменные командной оболочки
-
1. Используйте команду echo для вывода строки "Привет", после которой должно следовать ваше имя. (Используйте переменную командной оболочки bash!)
-
echo Привет $USER
-
2. Создайте переменную
answer
, значение которой равно 42. -
answer=42
-
3. Скопируйте значение переменной $LANG в значение переменной $MyLANG.
-
MyLANG=$LANG
-
4. Выведите список используемых в данное время переменных командной оболочки.
-
set set|more в Ubuntu/Debian
-
5. Выведите список всех экспортируемых переменных командной оболочки.
-
env
-
6. Присутствует ли информация о вашей переменной в выводе команд
env
иset
? -
env | more set | more
-
7. Уничтожьте вашу переменную
answer
. -
unset answer
-
8. Создайте две переменные и
экспортируйте
одну из них. -
var1=1; export var2=2
-
9. Выведите значение экспортированной переменной в дочерней интерактивной командной оболочке.
-
bash echo $var2
-
10. Создайте переменную и присвойте ей значение 'Dumb', после чего аналогичным образом создайте другую переменную с значением 'do'. Используйте команду
echo
и две созданные переменные для вывода слова 'Dumbledore'. -
varx=Dumb; vary=do Решение от Yves из компании Dexia : echo $varx'le'$vary're' Решение от Erwin из компании Telenet : echo "$varx"le"$vary"re
-
11. Найдите список экранированных с помощью обратного слэша управляющих символов на странице руководства командной оболочки bash. Добавьте управляющий символ в значение переменной
PS1
для вывода времени в приветствии командной оболочки. -
PS1='\t \u@\h \W$ '
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 11. Операторы управления | Глава 13. Встраивание и параметры командных оболочек |