- •«Операционные системы.Командный интерфейс» конспект лекций Тема 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
Введение в shell- программирование
Тема 20. Операторы – команды
Язык shell по своим возможностям приближается к высокоуровневым алгоритмическим языкам программирования. Операторы языка shell позволяют создавать собственные программы. В программах могут использоваться любые команды командного языка, в том числе и рассмотренные в данном пособии.
Такие программы, а также командные файлы, содержащие их, назы-
вают shell-процедурами или shell-файлами. От обычных программ
они отличаются способом их обработки. Процедура не требует ком-
пиляции, построения объектного файла и последующей компоновки, так как shell, обрабатывающий их, является транслятором интерпретирующего, а не компилирующего типа. Процедура - аналог командного файла в MS-DOS, но с более широкими возможностями. Здесь же отметим, что рассмотренные ниже операторы могут быть использованы как в теле процедуры, так и выполнены независимо как обычные команды в диалоговом режиме.
Текст процедуры набирается как обычный текстовый файл. Для этих целей при создании большой процедуры целесообразно использовать редактор vi. Для изучения принципов на примере простейших процедур можно использовать один из способов создания пустых файлов с последующим заполнением командами (рассматривали выше) или rоманду cat.
Проверенный и отлаженный shell-файл может быть вызван на исполнение, например, следующим способом:
$ chmod u+x shfil
$ shfil
$
Такая форма предполагает, что файл процедуры новый и его надо сначала сделать выполняемым.
Можно использовать также и следующий способ:
$ sh -c "shfil" или
$ sh shfil
В этих случаях по команде sh вызывается вторичный интерпретатор shell, и в качестве аргумента ему передается командная строка, содержащая имя файла процедуры shfil, находящегося в текущем каталоге. Однако, этот способ накладывает ограничения на исполнение некоторых команд ОС управления процессами (например nice – см. ниже).
Процедуре при ее запуске могут быть переданы аргументы. В общем случае командная строка вызова процедуры имеет следующий вид:
$ имя_процедуры $1 $2 ...$9
$
Каждому из девяти первых аргументов командной строки в
тексте процедуры соответствует один из позиционных параметров:
$1, $2, ..., $9 соответственно. Параметр $0 соответствует имени
самой процедуры, т.е. первому полю командной строки. К каждому
из 10 первых аргументов можно обратиться из процедуры, указав номер его позиции.
Некоторые вспомогательные операторы:
echo - вывод сообщений из текста процедуры на экран.
$ echo "начало строки
> продолжение строки" или единой строкой
$
# - для обозначения строки комментария в процедуре. (Строка не будет обрабатываться shell-ом).
banner - вывод сообщения на экран заглавными буквами (например для идентификации следующих за ним сообщений).
$banner 'hello ira'
HELLO IRA
$
Простейший пример. Здесь оператор echo выполняется в командном режиме.
$shfil p1 pp2 petr
$echo $3
petr
$
Значения параметрам, передаваемым процедуре, можно присваивать и в процессе работы процедуры с помощью оператора
set - присвоить значения позиционным параметрам;
Пример.
$set a1 ab2. abc
$echo $1 $2
a1 ab2 - в этом примере параметры указываются в явном виде.
$
Количество позиционных параметров может быть увеличено до
необходимого значения путем "сдвига" их в командной строке влево на одну позицию с помощью команды shift без аргументов:
shift - сдвинуть позиционные параметры влево на одну позицию
После выполнения shift прежнее значение параметра $1 теря-
ется, значение $1 приобретает значение $2, значение $2 - значение $3 и т.д..
Продолжение предыдущего примера:
$shift
$echo $1 $2
ab2 abc
$
