Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Командные файлы и сценарии

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

В операционной системе MS DOS и основанных на ней модификациях Windows 9х такие пакетные файлы должны обязательно иметь расширения.bat, в операционных системах OS/2 и Windows NT командные файлы обязаны иметь расширение.cmd. В этих ОС запуск командных файлов требует просто указания их имени в качестве имени команды. Зато в Unix никаких ограничений на обозначения командных файлов (сценарием команд) не накладывается. Но для их запуска на выполнение возможны целых три пути. Первый из них заключается в запуске командного файла с помощью запускающей команды sh, так что такой запуск имеет вид

sh имя_командного_файла

Близким к нему, но более кратким вариантом является запись вместо команды просто единственного символа точки (так что символ точки используется в Unix в существенно различных применениях: обозначения текущего каталога и имени запускающей команды). Таким образом, предыдущая команда может быть также введена в эквивалентном виде

. имя_командного_файла

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

chmod +x имя_командного_файла

и командный файл можно будет запускать непосредственно по имени.

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

Для краткости параллельно будем рассматривать возможности трех типов командных файлов: для интерпретаторов типа MS (для MS DOS/Windows 9x, OS/2 и Windows NT), для командного интерпретатора Unix, называемого bash (в модификации, применяемой в Linux), и для командного интерпретатора tcsh из Linux.

Остановимся вначале на вспомогательных средствах, неиспользование которых или неверное использование может буквально раздражать пользователя командного режима. Для вывода информации по ходу выполнения командного файла предназначена команда ECHO (во всех рассматриваемых оболочках). Для интерпретаторов типа MS есть замечательная возможность запретить при выполнении этой команды выдачу на экран текста самой этой команды, которая по умолчанию для наблюдения за ходом действий появляется на нем. Эта возможность заключается в задании служебного символа @ перед первым символом команды ECHO, так что последняя приобретает вид @ECHO.

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

В командной оболочке bash в Unix команды, выполняемые из сценария команд, не отображают свой текст на экране в ходе такого выполнения. Текст команд отображается только, когда команды по одиночке (или в составе пакета, задаваемого разделителями; && ||) задаются на выполнение в обычном режиме командной строки. Практически это снимает проблемы "отображать или не отображать". В командном интерпретаторе tcsh возможности управления отображением команд аналогичны интерпретаторам типа MS (точнее вторые используют более раннее техническое решение, появившееся в свое время именно в интерпретаторах типа tcsh). Эти возможности задаются в tcsh парой команд set echo и unset echo, причем первая из них устанавливает режим отображения текста каждой из следующих команд, а вторая отменяет режим такого отображения.

Команда echo в Unix имеет одну полезную опцию, задаваемую как -n. При наличии этой опции не происходит перехода на следующую строку вывода по завершению вывода текущей командой. Это дает возможность формировать единственную строку вывода, используя несколько операторов. (В отдаленных аналогиях эта возможность аналогично использованию оператора WRITE в Паскале вместо WRITELN или использованию оператора вывода printf, аргумент формата которого не содержит управляющего символа '\n'.)

Для вспомогательных целей программирования предназначены комментарии в командных файлах. Командные интерпретаторы типа MS рассматривают как комментарии строки, начинающиеся со служебного слова REM, а в Unix интерпретаторах для задания комментариев предназначен служебный символ #.

В Unix имеется возможность с помощью команды chsh изменить командный обработчик по умолчанию или вызывать командный файл, указывая явно командный интерпретатор в виде

bash имя_командного_файла

tcsh имя_командного_файла

Тем не менее, в общем случае для удобства пользователя возникает практическая проблема автоматического определения для какого из командных интерпретаторов предназначен конкретный сценарий команд. Для этих целей служит задание вида интерпретатора непосредственно в первой строке командного файла. Это делается с помощью служебной директивы

#! имя_ программы_нужного_интерпретатора

Так, задание вызова интерпретатора bash должно иметь в первой строке текст

#!/bin/sh

а для вызова интерпретатора tcsh текст

#!/bin/tcsh

(использовано стандартное размещение упомянутых программ интерпретаторов в файловой системе Linux).

Более-менее сложное программирование немыслимо без использования переменных. Поэтому все рассматриваемые оболочки содержат средства задания переменных. В оболочках типа MS переменные задаются с помощью вспомогательного служебного слова SET. Практически это слово открывает оператор командной строки, задающий значение переменной (это очень похоже на язык Basic, где для таких целей используется служебное слово LET). Оператор определения переменной имеет здесь вид

set имя_переменной = значение

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

В оболочке tcsh для Unix определение переменной строкового типа также задается с помощью служебного слова set. Причем в этом интерпретаторе символ присваивания (символ =) либо совсем не выделяется пробелами (ни справа, ни слева), либо выделяется пробелами с обеих сторон.

В оболочке bash для Unix определение переменной строкового типа задается более простой конструкцией вида

имя_переменной = значение

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

Для более тонких случаев в качестве символов, окаймляющих значение для переменной, используются символы прямых или обратных апострофов (символы ' и `). Предварительно заметим, что при использовании кавычек содержимое, заданное параметром значение, используется в применении переменной без всяких изменений и подстановок. Определение переменной с помощью апострофов приводит к подстановке в тексте значений переменных.

После определения значения переменной указанными выше способами эта переменная может быть использована в дальнейших командах. Такое использование требует не просто задания имени переменной, но ее имени с уточняющими символами. В интерпретаторах типа MS такое применение имени переменной требует записи вида

% имя_переменной %

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

${ имя_переменной }

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

Если какая-то переменная не определена, т.е. для ее имени отсутствует оператор определения значения, то командный интерпретатор автоматически считает, что значение такой переменной есть пустая строка (строка совсем без символов). Задание использования такой неопределенной переменной в последующих строках командного файла не приводит к сообщениям об ошибках, а просто вместо нее абсолютно ничего не подставляется. Это надо хорошо помнить, так как из-за ошибок в воспроизведении имени переменной (в отличие от большинства языков программирования, хорошо известных студентам) никаких сообщений не возникает, а "по-тихому" возникает ошибка отсутствия данных.

Данное изложение знакомит только с простейшими средствами командных интерпретаторов операционных систем. Не рассмотренными остались многие другие, в том числе и достаточно используемые и полезные средства. Среди них – приемы использования переменных в командных интерпретаторах, ввод данных в сценариях команд, арифметические операторы, управляющие структуры в MS, управляющие структуры разветвления в Unix сценариях, управляющие структуры циклов в Unix сценариях. Их изучение рекомендуется продолжить по списку рекомендуемой литературы [1,7,11,24].


 

<== предыдущая лекция | следующая лекция ==>
Стандартный ввод-вывод и конвейеры командной строки | Библиографический список. 1. Банахан М. , раттер Э. Введение в операционную систему Unix
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 869; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.