Библиотека сайта 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. Встраивание и параметры командных оболочек |
