Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС лабы / ОС - Лабораторная работа 3.doc
Скачиваний:
60
Добавлен:
01.06.2015
Размер:
469.5 Кб
Скачать
    1. Структура команд unix

      1. Простые команды

Базовой конструкцией языка команд UNIX(языкаshell) являетсяпростая команда. Она состоит из имени команды и, возможно, параметров, разделенных пробелами, и перенаправлений. Небольшое количествовстроенныхкоманд выполняются непосредственно шеллом. Остальные команды называютсявнешними. Имя внешней команды – это имя исполняемого файла (либо двоичной программы, либо шелл-скрипта), хранящегося в одном из каталогов, перечисленных в переменнойPATH.

Для выполнения внешней команды шелл запускает отдельный процесс. В результате выполнения команды вырабатывается код завершенияпроцесса, который может затем быть проанализирован. Нулевое значение кода обычно означает нормальное завершение, значение, большее нуля – ошибку. Если выполнение команды было прервано вследствие получения сигнала, то код завершения равен 128 +номер сигнала. Код 127 означает «файл команды не найден», а код 126 – «файл команды не является исполняемым».

Существенное различие между встроенными и внешними командами заключается в том, что особенности синтаксиса и семантики встроенных команд могут разниться в зависимости от используемой версии шелла (sh,ksh,csh,bashи другие), в то время как набор и особенности внешних команд связаны с используемой версией операционной системы (BSD UNIX,SVR4,Linuxи т.п.).

      1. Стандартные ввод и вывод

Большинство команд UNIXвыводят результат своей работы в текстовом виде настандартный вывод. По умолчанию это означает, что результаты выводятся на терминал, с которого запущена команда. Однако стандартный вывод легко может быть перенаправлен в файл или на устройство. ВUNIXимена устройств перечислены в одном из каталогов файловой системы (обычно в каталоге/dev) в качестве специальных файлов.

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

Многие команды используют также стандартный ввод, который по умолчанию означает данные, вводимые с клавиатуры терминала. Признаком конца ввода служит комбинацияCtrl+D. Как часто встречающийся вариант, в команде может быть предусмотрено задание имени одного или нескольких файлов с исходными данными, но если ни одно имя не задано, то используется стандартный ввод. Он также может быть перенаправлен для чтения данных из файла, с устройства или даже непосредственно из текста команды.

Как правило, стандартный вывод команд UNIXимеет как можно более регулярную структуру. Например, команда просмотра каталога «ls –l»выдает в каждой строке информацию об одном файле, без общего заголовка и без итоговых данных. Очень часто вывод команды выглядит как таблица, столбцы которой разделены знаками табуляции. Это облегчает последующую обработку выведенных данных следующими командами. Из тех же соображений команды не выдают лишних сообщений типа «Команда успешно выполнена», хотя могут выдавать сообщения об ошибках.

С точки зрения программирования в UNIX, стандартный ввод – это данные, которые будут вводиться, если в функции ввода указан описатель (хэндл) 0, стандартному выводу соответствует хэндл 1, а стандартному выводу ошибок – хэндл 2. В языках высокого уровня стандартные ввод и вывод используются, когда при вызове функции чтения или записи не указан файл. Для вывода ошибок обычно имеется отдельная функция.

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

Если стандартный вывод некоторой команды не представляет ценности, его можно перенаправить на фиктивное устройство /dev/null.

Основными формами перенаправления являются следующие:

файл

Стандартный вывод команды направляется в указанный файл.

>> файл

То же самое, но, если файл уже существует, то стандартный вывод добавляется в его конец.

файл

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

<<  слово

...

входной документ

...

слово

Перенаправление типа «документ здесь». Слово, заданное после <<, рассматривается как ограничитель данных. Следующие строки содержат данные стандартного ввода. Концом данных будет строка, содержащая только слово-ограничитель.

2>&1

Стандартный вывод ошибок направляется на текущий стандартный вывод.

Пробел после знаков перенаправления >,>>,<,<<допускается, но не обязателен.

Если в одной команде задано несколько перенаправлений, то они выполняются слева направо, при этом результат может зависеть от порядка. Например, «>file1 2>&1» – это не то же самое, что «2>&1 >file1».