
- •«Операционные системы.Командный интерфейс» конспект лекций Тема 1. Введение. Содержание курса
- •Тема 2. Классификация режимов работы ос
- •Диалоговый пакетный
- •Тема 3. Виды нтерфейсов пользователя ос unix
- •Тема 4. Обобщенные принцпы построения современных ос
- •Тема 5. Состав ос unix
- •Тема 6. Среда для работы пользователя
- •Тема 7. Регистрация пользователя в системе
- •Тема 8. Группа коммуникационных команд
- •Тема 9. Группа вспомогательных команд
- •Тема 10. Перенаправление ввода-вывода
- •Файловая система unix
- •Тема 11. Файлы unix
- •Тема 12. Генерация имен файлов
- •Тема 13. Структура системы каталогов unix
- •Тема 14. Управление каталогами в unix
- •Тема 15. Команды поиска файлов в системе каталогов
- •Тема 16. Управление файлами
- •Тема 17. Управление правами доступа к файлам и каталогам
- •Здесь файл fil1.C, владельцем которого является пользова-
- •Тема 18. Конвееры и фильтры
- •Тема 19. Создание и редактирование текстовых файлов
- •Команды удаления текста
- •Введение в shell- программирование
- •Тема 20. Операторы – команды
- •В unix при написании операторов важное значение отводится
- •Тема 21. Управление локальными переменными
- •Тема 22. Подстановка значений переменных
- •Тема 23. Экспортирование локальных переменных в среду shell
- •Тема 24. Проверка условий
- •2. Сравнение числовых значений:
- •3. Сравнение строк:
- •If список_команд1
- •Тема 25. Построение циклов
- •Тема 26. Управление процессами в unix
- •Тема 27. Создание фоновых процессов
- •Тема 28. Управление приоритетами
- •Тема 29. Завершение процессов
- •Тема 30. Перехватывание сигналов
- •Тема 31. Сетевые средства unix
Тема 23. Экспортирование локальных переменных в среду shell
При выполнении процедуры ей можно передавать как позиционные параметры (см. выше) так и ключевые - локальные переменные порожденного процесса. Локальные переменные помещаются в область локальных переменных, связанную с конкретным текущим процессом, породившим переменную. Они доступны только этому процессу и недоступны порожденным процессам-потомкам (например – sh-процедурам). Переменные другим процессам можно передавать неявно через среду. Для этого локальная переменная должна быть экспортирована (включена) в среду, в которой исполняется процедура, использующая эту переменную. Среда пользователя, т.е. глобальные переменные, доступна всем процессам.
Экспортирования не требуют переменные, созданные в теле самой процедуры. Процедура является порожденным процессом по отношению к оболочке, т.е. порожденный процесс не может изменить значения локальных переменных родительского процесса.
Три формата команды экспортирования:
$export список имен локальных переменных
$export имя_лок_переменной=значение
$export (без параметров) - выводит перечень всех экспортированных локальных и переменных среды (аналог команды env).
Рассмотрим некоторый фрагмент протокола работы с системой.
$color = red переменная определена, но не экспортирована
$export count = 1 переменная определена и экспортирована, т.е.
потенциально доступна всем порождаемым
процессам
$export
PATH = …..
HOME = …..
color = red
count = 1
$cat proc1 создание порожденного процесса процедуры
echo $color
echo $count
exit завершение процесса
<ctrl.D>
$proc1 выполнение процедуры
на экран выводится значение только одной,
экспортированной переменной; вторая переменная –
- не определена
$cat proc2 еще одна процедура
color = black
count = 2
echo $color
echo $count
exit
$proc2
black
выводятся значения обеих переменных, т.к. они
определены в самой поцедуре
$echo $color
red
$echo $count
1
$
На экран выводятся первоначальные значения переменных родительскoго процесса – shell. Новые (измененные) значения локальных переменных существуют только на время существования породившего их порожденного процесса. Чтобы изменить значене переменной родительского процесса ее надо экспортировать. Но после завершения порожденного среда родительского восстанавливается.
Еще пример.
$export color=black
$kch
$echo $color
black
$color = red
$echo $color
red
$exit
$echo $color
black
$
Здесь порожденным процессом является вторичная оболочка Korn schell. Среда родительского процесса не изменена, т.е. сохранилось значение экспортированной в нее переменной. Порожденные процессы не могут изменить среду родительских процессов.