Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен по курсу ОСс и ОСТ20081.doc
Скачиваний:
10
Добавлен:
28.09.2019
Размер:
1.57 Mб
Скачать

35. Интерфейс пользователя с ос unix (уровень командной строки). Конвейеры.

Главная сила UNIX проистекает не из мощи отдельных команд, а из возможности их сопряжения. Конвейер – один из самых красивых и продуктивных механизмов подобного сопряжения. Конвейер – это последовательность команд, разделённых знаком конвейера |, при этом стандартный вывод всех команд, кроме последней, направляется на стандартный ввод следующей команды. Каждая команда выполняется как самостоятельный процесс. Shell ожидает их завершения. Соединение в конвейер даже относительно простых команд способно дать по существу новое качество.

Конвейер представляет собой простое, но исключительно мощное средство языков семейства shell, поскольку позволяет во время работы динамически создавать "комбинированные" команды. Например, указание в одной командной строке последовательности связанных конвейером команд

ls -l | sort -r

приведет к тому, что подробное содержимое текущего каталога будет отсортировано по именам файлов в обратном порядке и выдано на экран терминала. Если бы не было возможности комбинирования команд, до для достижения такой возможности потребовалось бы внедрение в программу ls возможностей сортировки.

Следующее звено между последовательными компонентами называется каналом. Для интерпретации конвейера shell создает временный файл типа «канал», который с одного конца записывает информацию, а с другого читает.

1 - стандартный вывод (выводятся результаты работы процесса)

2 - стандартная диагностика (диагностические сообщения)

0 - стандартный ввод

C помощью команды tec можно организовать ответвление канала, т.е. помещать информацию не только на стандартный вывод, но и в указанные файлы.

$ls -la /usr/bin |wc -l |tec /home/brigades/pm6203/tmp

36. Интерфейс пользователя с ос unix (уровень командной строки).Управляющие конструкции языка shell.Экранирование. Перенаправление ввода – вывода.

Shell – это язык программирования. shell-процедуры (команды, написанные на соответствующем языке – файл сценария, скрипт) – используются при загрузке ОС.

Следовательно, сущ: послед структуры, разветвляющиеся структуры, циклические структурыЮ структуры перехода...

Экранирование

В качестве средств экранирования исп. " ",' ' и \.

Из примеров очевидно их действие:

Можно в одной строке записывать несколько присваиваний.

x=22 y=33 z=$x

A="$x" B='$x' C=\$x

Тогда

echo A = $A B = $B C = $C

eval echo evaluated A = $A

eval echo evaluated B = $B

eval echo evaluated C = $C

Выдадут на экран

A = 22 B = $x C = $x

evaluated A = 22

evaluated B = 22

evaluated C = 22

Приведем еще примеры, связанные с экранированием перевода строки. Пусть переменной "string" присвоено значение "массива" 2x3:

abc

def

Обратим внимание, что для избежания присваивания лишних пробелов вторая строка массива начата с первой позиции следующей строки:

string="abc

def"

Тогда три варианта записи переменной в команде "echo"

echo $string

echo '$string'

echo "$string"

дадут соответственно три различных результата:

abc def

$string

abc

def

Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ, что позволяет использовать специальные символы просто как символы, представляющие сами себя (он может экранировать и сам себя - \\), но в командном файле бэк-слэш позволяет об'единять строки в одну (экранировать конец строки).

Механизм перенаправления ввода/вывода

Реализация механизма основывается на следующих свойствах ОС UNIX.

1. любой ввод/вывод трактуется как ввод из некоторого файла и вывод в некоторый файл.

2. доступ к любому файлу производится через его дескриптор. Фиксируются три значения дескрипторов файлов. Файл с дескриптором 1 называется файлом стандартного ввода (stdin), файл с дескриптором 2 - файлом стандартного вывода (stdout), и файл с дескриптором 3 - файлом стандартного вывода диагностических сообщений (stderr).

3. программа, запущенная в некотором процессе, "наследует" от породившего процесса все дескрипторы открытых файлов.

В головном процессе интерпретатора командного языка файлом стандартного ввода является клавиатура терминала пользователя, а файлами стандартного вывода и вывода диагностических сообщений - экран терминала Но можно сообщить интерпретатору, какой файл или вывод какой программы должен служить файлом стандартного и какой файл или ввод какой программы должен служить файлом стандартного вывода. Тогда интерпретатор перед выполнением системного вызова exec открывает указанные файлы, подменяя смысл дескрипторов 1, 2 и 3.

Все, что требуется для нормального функционирования механизма перенаправления ввода/вывода - это придерживаться при программировании соглашения об использовании дескрипторов stdin, stdout и stderr.. Функция printf неявно использует stdout, функция scanf - stdin, а функция error - stderr.