- •И.Н.Акуленок
- •Утверждено советом университета
- •Введение
- •Глава 1. Текстовые редакторы
- •1.1. Редактор ed
- •1.1.1. Команды, не использующие адресации строк
- •1.1.2. Команды, использующие один адрес
- •1.1.3. Команды, использующие два адреса
- •1.1.4. Нумерация строк
- •1.1.5. Примеры использования команд
- •1.2. Редактор VI и ex
- •1.2.1. Редактирование нескольких файлов
- •1.2.2. Вставка текста из одного файла в другой
- •1.3. Потоковый редактор sed
- •1.4. Контрольные вопросы
- •Глава 2. Командные процессоры ос unix
- •2.1. Типы командных процессоров
- •2.2. Идентификация и смена оболочки
- •2.3. Запуск shell и стартовых shell–файлов
- •2.4. Установка переменных среды
- •2.5. Псевдонимы команд
- •2.6. Выполнение .Profile после его изменения
- •2.7. Контрольные вопросы
- •Глава 3. Интерпретатор shell
- •3.1. Shell–переменные
- •3.1.1. Задание значений переменных и их отмена
- •3.1.2. Экспорт переменных
- •3.2. Специальные символы
- •3.2.1. Использование двойных кавычек и апострофа
- •3.2.2. Обратные апострофы
- •3.2.3. Обратная наклонная черта
- •3.3. Позиционные переменные
- •3.4. Код завершения процесса
- •3.5. Конвейеры и списки
- •3.6. Композиции команд
- •3.5.1. Порожденный shell – оператор круглые скобки ( )
- •3.5.2. Оператор списка – фигурные скобки {}
- •3.6. Контрольные вопросы
- •Глава 4. Программные структуры
- •4.1. Команда test
- •4.1.1. Условия проверки файлов
- •4.1.2. Условия проверки строк
- •4.1.3. Условия сравнения целых чисел
- •4.1.4. Сложные условия
- •4.2. Команда expr
- •4.3. Команда read
- •4.4.Условный оператор if
- •4.5. Оператор цикла for
- •4.6. Операторы цикла while и until
- •4.7. Оператор вызова case
- •4.8. Функции в shell
- •4.9. Контрольные вопросы
- •5. Создание сценария командного процессора
- •5.1. Пример простейшего сценария
- •5.2. Основные этапы разработки сценария
- •5.3. Отладка командных процедур
- •5.4. Выполнение shell–программ
- •5.5. Создание новых команд
- •5.6. Контрольные вопросы
- •Список литературы
- •Оглавление
- •Акуленок Ирина Николаевна
3.1. Shell–переменные
В любом языке программирования для хранения значений служат переменные. Сам термин «переменная» предполагает, что в процессе выполнения программы ее значение изменяется.
Переменные интерпретатора предоставляют интерпретатору основную информацию и могут быть установлены как самим интерпретатором, так и пользователем.
В отличие от остальных языков программирования shell-переменные не связаны с определенным типом данных. Любое значение, которое присваиваетсяshell-переменным, воспринимается как строка символов.
3.1.1. Задание значений переменных и их отмена
Имя shell–переменной должно всегда начинаться с буквы или символа подчеркивания и не может начинаться с цифры. Значение переменной может включать буквы, цифры и подчеркивания. Shell–переменные также могут хранить строки текста.
По традиции стандартные переменные с предопределенными для UNIX значениями пишутся в верхнем регистре. Они резервируются для специальных значений.
Для присваивания значения shell–переменной используется знак равенства = без пробелов с обеих от него сторон.
$ u=UNIX
Если нужно использовать значение переменной, то имени должен предшествовать символ $. Этот символ информируетshellо том, что следующее за ним имя относится к переменной, а не к файлу или литералу. Значения требуемых переменных можно вывести на экран по командеecho, при этом перед именем следует поставить знак$.
Например,
$ echo $u
UNIX
На экране отобразится слово UNIX, поскольку именно это значение было присвоено переменной$u.
Указание имени переменной в операторе присваивания преследует две цели – определение переменной (что называют также установкой ее значения или описанием переменной) и присваивание значения данной переменной.
В некоторых случаях требуется удалить из списка имя переменной. Для этого служит специальная команда unset, или же вы можете просто присвоить переменной нулевое значение, не удаляя ее из списка:
$ HERE=
$ echo $HERE
или
$ unset $u
$ echo $u
Для переменных среды (PATH,PS1, PS2, ...)командаunsetне действует (что является весьма разумным).
В операторе присваивания можно присваивать значения нескольким переменным:
$ a=T b=H c=I d=S
$ echo $a$b$c$d
THIS
Помимо своего очевидного прямого назначения в shell–программах,shell–переменные могут быть весьма полезны в интерактивном режиме. Предположим, что необходимо обращаться к файлам каталога с очень длинным именем из текущего каталога, что довольно неудобно набирать это длинное имя –/usr/td/c/mon/scr/doc.
Простое решение такой задачи состоит в сохранении в некоторой переменной имени каталога для дальнейшей работы с ней:
$ b=/usr/td/c/mon/scr/doc
Можно посмотреть переменную bпо команде
$ echo $b
Теперь, чтобы получить список файлов каталога /usr/td/c/mon/scr/doc, достаточно ввести команду:
$ ls $b
Eсли необходимо выполнить программу «prog», размещенную в каталоге$b, то можно создать новую переменную, которая будет хранить абсолютное полное имя этой программы:
prog=/usr/td/mon/scr/doc/prog
или
prog=$b/prog
Теперь ввод строки
$prog $b/sxema.txt
приведет к выполнению программы
/usr/td/c/mon/scr/doc/prog
с аргументом
/usr/td/c/mon/scr/doc/sxema.txt
После установки переменных ее имя можно использовать в выражениях с префиксом $.
Например:
$ doc=/usr/local/bin/net
$ cd $doc
$ pwd
$ /usr/local/bin/net
Как видим из приведенных примеров, использование переменных в ряде случаев позволяет упростить форму интерактивных взаимодействий, т.е. уменьшить объем ввода с клавиатуры.