Uploaded by Анатолий Карпук

Операционные системы и базы данных. Лабораторный практикум. Часть 1

advertisement
МИНИСТЕРСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ
РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования
«БЕЛОРУССКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ СВЯЗИ»
Кафедра программного обеспечения сетей телекоммуникаций
ОПЕРАЦИОННЫЕ СИСТЕМЫ И БАЗЫ ДАННЫХ
Лабораторный практикум
для студентов специальностей
1-45 01 01 – Инфокоммуникационные технологии (по направлениям),
1-45 01 02 – Инфокоммуникационные системы (по направлениям)
В 2 частях
Часть 1
Минск
2018
УДК 004.451.47+004.652.8
БББ 32.972.11
К 26
Рекомендовано к изданию
кафедрой программного обеспечения сетей телекоммуникаций
12.06.2018 г., протокол № 7
Со с та в и те ль
А.А. Карпук, доцент
кафедры программного обеспечения сетей телекоммуникаций,
кандидат технических наук, доцент
Р еце нз е нт
В.А. Новиков, доцент
кафедры экономической информатики
Белорусского государственного университета,
кандидат технических наук, доцент
К 26
Операционные системы и базы данных : лабораторный практикум
для студентов специальностей 1-45 01 01 – Инфокоммуникационные
технологии (по направлениям), 1-45 01 02 – Инфокоммуникационные
системы (по направлениям). В 2 ч. Часть 1 / сост. А.А. Карпук. –
Минск : УО БГАС, 2018. – 102 с.
ISBN 978-985-7002-80-1.
Приведены краткие теоретические сведения и задания к лабораторным работам по
учебной дисциплине «Операционные системы и базы данных». Темы лабораторных работ соответствуют учебной программе высшего учебного образования по учебной дисциплине и включают вопросы работы с ОС Windows средствами командных интерпретаторов cmd и PowerShell, а также вопросы разработки диаграмм «сущность – связь» и
структуры таблиц базы данных.
Предназначено для студентов и преподавателей Белорусской государственной академии связи.
УДК 004.451.47+004.652.8
БББ 32.972.11
ISBN 978-985-7002-80-1
2
© Учреждение образования
«Белорусская государственная
академия связи», 2018
ВВЕДЕНИЕ
Целью учебной дисциплины «Операционные системы и базы данных»
является изучение теоретических основ построения и функционирования
операционных систем, принципов построения баз данных, практическое
овладение принципами работы с операционными системами, создания и
эксплуатации баз данных, организации пользовательского интерфейса с операционными системами и базами данных.
Задачи изучения учебной дисциплины:
– получение знаний о назначении, функциях, принципах построения и
архитектуре современных операционных систем (ОС);
– изучение методов управления вычислительными процессами, памятью, внешними устройствами, файловой системой в современных ОС;
– получение знаний о назначении, функциях, принципах построения и
архитектуре современных СУБД;
– изучение методов проектирования логической структуры реляционных баз данных (БД) и механизмов индексации и поиска данных в реляционных БД;
– изучение и получение практических навыков работы с СУБД Microsoft
SQL Server на языках SQL и Transact-SQL.
Лабораторные работы выполняются на персональных ЭВМ (ПЭВМ) с
процессором не ниже Pentium IV/1,5 ГГц с объемом оперативной памяти не
менее 1 Гбайт под управлением операционной системы Windows XP и выше.
Для выполнения лабораторной работы № 1 требуется командный интерпретатор cmd, который автоматически устанавливается на ПЭВМ при установке операционной системы.
Для выполнения лабораторной работы № 2 на ПЭВМ должен быть установлен командный интерпретатор PowerShell, который автоматически устанавливается при установке операционной системы Windows 7 и выше. При
использовании операционной системы Windows XP на ПЭВМ требуется
установить командный интерпретатор PowerShell, инсталляционный пакет
которого находится в открытом доступе на официальном сайте компании
Microsoft.
Для выполнения лабораторной работы № 3 на ПЭВМ должен быть установлен пакет Microsoft Office Visio 2007 или Microsoft Office Visio 2010. Использование пакета более поздних версий не рекомендуется, поскольку в
них значительно изменен пользовательский интерфейс.
3
ЛАБОРАТОРНАЯ РАБОТА № 1
ВВОД – ВЫВОД ДАННЫХ В ФАЙЛЫ И РАБОТА С ОС WINDOWS
СРЕДСТВАМИ КОМАНДНОГО ИНТЕРПРЕТАТОРА CMD
Цель работы: изучение возможностей интерпретатора командной строки cmd и командных файлов ОС Windows, приобретение навыков самостоятельной работы с командным интерпретатором cmd, разработки и отладки
командных файлов.
1.1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
1.1.1. Инструменты, используемые для автоматизации работы в ОС
Windows
1.1.1.1. Оболочка (интерпретатор) командной строки cmd
Во всех версиях ОС Windows поддерживается оболочка командной
строки (command shell) и определенный набор утилит. Механизм работы
оболочек командной строки в разных системах одинаков: в ответ на приглашение («подсказку», prompt), пользователь вводит некоторую команду, после чего оболочка выполняет команду, выводит приглашение и ожидает
ввода следующей команды.
Наряду с интерактивным режимом работы, оболочка поддерживает и
пакетный режим, в котором система последовательно выполняет команды,
записанные в текстовом командном файле (файле – сценарии).
Начиная с версии Windows NT, в качестве оболочки командной строки
используется интерпретатор cmd.
1.1.1.2. Основные
PowerShell
свойства
командной
оболочки
Microsoft
Перед разработчиками новой оболочки, получившей название Windows
PowerShell (изучается в лабораторной работе № 2), стояли следующие задачи:
применение командной строки в качестве основного интерфейса администрирования;
интеграция командной строки, объектов COM, WMI и .NET;
работа с произвольными источниками данных в командной строке по
принципу файловой системы.
4
Основная идея, реализованная в PowerShell, состоит в том, что в командной строке вывод результатов команды представляет собой не текст (в
смысле последовательности символов), а объект (данные вместе со своими
методами).
1.1.2. Командный интерпретатор cmd
1.1.2.1. Запуск командного интерпретатора
Для запуска командного интерпретатора следует выбрать пункт «Выполнить» («Run») в меню «Пуск» («Start»), ввести имя файла cmd и нажать
кнопку «OK». В результате откроется новое окно (рисунок 1.1), в котором
можно вводить команды и видеть результаты их работы.
Рисунок 1.1 – Командное окно интерпретатора cmd в Windows 10
1.1.2.2. Настройка параметров командного окна интерпретатора
Интерпретатор имеет свой набор опций и параметров настройки. Просмотр и редактирование этих опций выполняется с помощью пункта «Свойства» управляющего меню окна (нажать правой кнопкой мыши на заголовок
окна). В окне свойств (рисунок 1.2) будут доступны четыре вкладки с опциями: «Настройки», «Шрифт», «Расположение» и «Цвета».
1.1.2.3. Внутренние и внешние команды. Структура команды интерпретатора
Внутренние команды распознаются и выполняются непосредственно
самим командным интерпретатором (например, COPY или DIR). Внешние
команды ОС – это отдельные программы, расположенные в том же каталоге,
что и cmd.exe, которые Windows загружает и выполняет аналогично другим
программам, например, MORE или XCOPY.
Для выполнения команды после приглашения командной строки
(например, C:\>) следует ввести имя этой команды (регистр не важен), ее
5
параметры и ключи (если они необходимы) и нажать клавишу
<Enter>. Например:
C:\>COPY C:\myfile.txt A:\ /V
Имя команды здесь COPY, параметры – C:\myfile.txt и A:\, а ключом является /V. Отметим, что в некоторых командах ключи могут начинаться не с
символа /, а с символа - (минус), например, -V.
Рисунок 1.2 – Окно настройки свойств интерпретатора в Windows 10
Многие команды Windows имеют большое количество дополнительных
параметров и ключей. Большинство команд снабжено встроенной справкой,
в которой кратко описываются назначение и синтаксис данной команды.
Получить доступ к такой справке можно путем ввода команды с ключом /?.
Например, если выполнить команду ECHO /?, то в окне будет выведен следующий текст:
Вывод сообщений и переключение режима отображения команд на
экране.
6
ECHO [ON | OFF]
ECHO [message]
Введите ECHO без параметра для определения текущего значения этой
команды.
Для некоторых команд текст справки может быть объемным и занимать
более одного экрана. В этом случае помощь можно выводить последовательно по одному экрану с помощью команды MORE и символа конвейеризации |, например:
XCOPY /? | MORE
В этом случае после заполнения очередного экрана вывод текста будет
прерываться до нажатия любой клавиши. Кроме того, используя символы
перенаправления вывода > и >>, можно выводимый на экран текст направить в текстовый файл для дальнейшего просмотра. Например, для вывода
текста справки к команде XCOPY в текстовый файл xcopy.txt, используется
следующая команда:
XCOPY /? > xcopy.txt
Вместо имени файла можно указывать имена устройств компьютера. В
Windows используются следующие имена устройств: PRN (принтер), CON
(терминал: при вводе это клавиатура, при выводе монитор), NUL (пустое
устройство, все операции ввода/вывода для него игнорируются).
1.1.2.4. Перенаправление ввода/вывода и конвейеризация команд
С помощью переназначения устройств ввода/вывода одна команда может направить свой вывод на вход другой, то есть имеется возможность передавать информацию от команды к команде. Практически это означает, что
для команд, которые используют стандартные входные и выходные устройства, ОС позволяет:
– выводить сообщения программ не на экран (стандартный выходной
поток), а в файл или на принтер (перенаправление вывода);
– читать входные данные не с клавиатуры (стандартный входной поток),
а из заранее подготовленного файла (перенаправление ввода);
– передавать сообщения, выводимые одной программой, в качестве
входных данных для другой программы (конвейеризация или композиция
команд).
Для того, чтобы перенаправить текстовые сообщения, выводимые какой-либо командой, в текстовый файл, нужно использовать конструкцию
команда > имя_файла
Если при этом заданный для вывода файл уже существует, то он перезаписывается, если не существует, то создается. Можно также не создавать
файл заново, а дописывать данные, выводимые командой, в конец суще7
ствующего файла. Для этого команда перенаправления вывода должна быть
задана так:
команда >> имя_файла
С помощью символа < можно прочитать входные данные для заданной
команды не с клавиатуры, а из заранее подготовленного файла:
команда < имя_файла
Рассмотрим примеры использования перенаправления вывода.
1. Вывод встроенной справки для команды COPY в файл copy.txt:
COPY /? > copy.txt
2. Добавление текста справки для команды XCOPY в файл copy.txt:
XCOPY /? >> copy.txt
Если при выполнении определенной команды возникает ошибка, то сообщение об этом по умолчанию выводится на экран. В случае необходимости сообщения об ошибках (стандартный поток ошибок) можно перенаправить в текстовый файл с помощью конструкции
команда 2 > имя_файла
В этом случае стандартный вывод будет производиться на экран. Также
имеется возможность информационные сообщения и сообщения об ошибках
выводить в один и тот же файл. Делается это следующим образом:
команда > имя_файла 2>&1
Например, в приведенной ниже команде стандартный выходной поток и
стандартный поток ошибок перенаправляются в файл copy.txt:
XCOPY D:\1.txt C: > copy.txt 2>&1
Наконец, с помощью конструкции
команда1 | команда2
можно использовать сообщения, выводимые первой командой, в качестве входных данных для второй команды (конвейер команд).
1.1.2.5. Команды MORE, SORT и TYPE
Команда MORE считывает стандартный ввод из конвейера или файла и
выводит информацию частями, размер каждой из которых не больше размера экрана. Возможны два способа записи команды:
MORE [диск:][путь]имя_файла или
имя_команды | MORE
Параметр [диск:][путь]имя_файла определяет расположение и имя файла с просматриваемыми на экране данными. Параметр имя_команды задает
команду, вывод которой отображается на экране (например, DIR или команда TYPE, использующаяся для вывода содержимого текстового файла на
экран). Приведем два примера.
8
Для поэкранного просмотра текстового файла news.txt возможны следующие варианты команд:
MORE news.txt
TYPE news.txt | MORE
Другой распространенной командой, использующей перенаправление
ввода/вывода и конвейеризацию, является SORT. Эта команда работает как
фильтр: она считывает символы в заданном столбце каждой строки файла,
упорядочивает их в возрастающем или убывающем порядке и выводит отсортированную информацию в файл, на экран или другое устройство. Возможны два варианта синтаксиса этой команды:
SORT [/R] [/+n] [[диск1:][путь1]файл1] [> [диск2:][путь2]файл2]
или
[команда |] SORT [/R] [/+n] [> [диск2:][путь2]файл2]
В первом случае параметр [диск1:][путь1]файл1 определяет имя файла,
который нужно отсортировать. Во втором случае будут отсортированы выходные данные указанной команды. Если параметры файл1 или команда не
заданы, то SORT будет считывать данные с устройства стандартного ввода.
Параметр [диск2:][путь2]файл2 задает файл, в который направляется сортированный вывод; если этот параметр не задан, то вывод будет направлен на
устройство стандартного вывода.
По умолчанию сортировка выполняется в порядке возрастания. Ключ /R
позволяет изменить порядок сортировки на обратный (от Z к A и затем от 9
до 0). Например, для поэкранного просмотра отсортированного в обратном
порядке файла price.txt, нужно задать следующую команду:
SORT /R < price.txt |MORE
Ключ /+n задает сортировку в файле по символам столбца с номером n.
Например, /+10 означает, что сортировка должна осуществляться, начиная с
десятой позиции в каждой строке. По умолчанию файл сортируется по первому столбцу.
1.1.2.6. Условное выполнение и группировка команд
В командной строке можно использовать специальные символы, которые позволяют вводить несколько команд одновременно и управлять работой команд в зависимости от результатов их выполнения. С помощью таких
символов условной обработки можно записать в одной строке и выполнить
составную команду.
Используя символ амперсанда &, можно разделить несколько утилит в
одной командной строке, при этом они будут выполняться друг за другом.
Например, если набрать команду DIR & PAUSE & COPY /? и нажать клавишу <Enter>, то вначале на экран будет выведено содержимое текущего ката9
лога, а после нажатия любой клавиши — встроенная справка команды
COPY.
Условная обработка команд в Windows осуществляется с помощью символов && и || следующим образом. Двойной амперсанд && запускает команду, стоящую за ним в командной строке, только в том случае, если команда, стоящая перед амперсандами была выполнена успешно. Например,
если в корневом каталоге диска C:\ есть файл plan.txt, то выполнение строки
TYPE C:\plan.txt && DIR приведет к выводу на экран этого файла и содержимого текущего каталога. Если же файл C:\plan.txt не существует, то команда DIR выполняться не будет.
Два символа || осуществляют в командной строке обратное действие, т.е.
запускают команду, стоящую за этими символами, только в том случае, если
команда, идущая перед ними, не была успешно выполнена. Таким образом,
если в предыдущем примере файл C:\plan.txt будет отсутствовать, то в результате выполнения строки TYPE C:\plan.txt || DIR на экран выведется содержимое текущего каталога.
Отметим, что условная обработка действует только на ближайшую команду, то есть в строке
TYPE C:\plan.txt && DIR & COPY /?
команда COPY /? запустится в любом случае, независимо от результата выполнения команды TYPE C:\plan.txt.
Несколько команд можно сгруппировать в командной строке с помощью круглых скобок. Рассмотрим, например, две строки:
TYPE C:\plan.txt && DIR & COPY /?
TYPE C:\plan.txt && (DIR & COPY /?)
В первой из них символ условной обработки && действует только на
команду DIR, во второй — одновременно на две команды: DIR и COPY.
1.1.3. Команды для работы с файловой системой
Для работы с файловой системой наиболее часто используются команды
CD, COPY, XCOPY, DIR, MKDIR и RMDIR. Они будут кратно рассмотрены
ниже.
1.1.3.1. Пути к объектам файловой системы
Файловая система логически имеет древовидную структуру и имена
файлов задаются в формате [диск:][путь\]имя_файла, то есть обязательным
параметром является только имя файла. При этом если путь начинается с
символа "\", то маршрут вычисляется от корневого каталога, иначе – от текущего каталога. Например, имя C:123.txt задает файл 123.txt в текущем ка10
талоге на диске C, имя C:\123.txt — файл 123.txt в корневом каталоге на диске C, имя ABC\123.txt — файл 123.txt в подкаталоге ABC текущего каталога.
Существуют особые обозначения для текущего каталога и родительского каталогов. Текущий каталог обозначается символом «.» (точка), его родительский каталог – символами «..» (две точки). Например, если текущим каталогом является C:\WINDOWS, то путь к файлу autoexec.bat в корневом
каталоге диска C может быть записан в виде ..\autoexec.bat.
В именах файлов (но не дисков или каталогов) можно применять так
называемые групповые символы или шаблоны: «?» (вопросительный знак) и
«*» (звездочка). Символ «*» в имени файла означает произвольное количество любых допустимых символов, символ «?» – один произвольный символ
или его отсутствие. Под шаблон text??1.txt подходят, например, имена
text121.txt и text11.txt, под шаблон text*.txt – имена text.txt, textab12.txt, а под
шаблон text.* – все файлы с именем text и произвольным расширением.
Для использования длинных имен файлов при работе с командной строкой их нужно заключать в двойные кавычки. Например, чтобы запустить
файл с именем «Мое приложение.exe» из каталога «Мои документы», нужно
в командной строке набрать "C:\Мои документы\Мое приложение.exe" и
нажать клавишу <Enter>.
1.1.3.2. Команда CD
Текущий каталог можно изменить с помощью команды
CD [диск:][путь\]. Например, команда CD \ выполняет переход в корневой
каталог текущего диска. Команда CD без параметров выводит имена текущего диска и каталога.
1.1.3.3. Команда COPY
Для копирования одного или нескольких файлов используется команда
COPY. Синтаксис этой команды:
COPY [/A|/B] источник [/A|/B] [+ источник [/A|/B] [+ ...]] [результат [/A|/B]]
[/V][/Y|/–Y]
Краткое описание параметров и ключей команды COPY приведено в
таблице 1.1. Приведем примеры использования команды COPY.
1. Копирование файла abc.txt из текущего каталога в каталог
D:\PROGRAM под тем же именем:
COPY abc.txt D:\PROGRAM
2. Копирование файла abc.txt из текущего каталога в каталог
D:\PROGRAM под новым именем def.txt:
COPY abc.txt D:\PROGRAM\def.txt
11
3. Копирование всех файлов с расширением txt с диска A: в каталог
«Мои документы» на диске C:
COPY A:\*.txt "C:\Мои документы"
Таблица 1.1 – Параметры и ключи команды COPY
Параметр
Описание
источник
Имя копируемого файла или файлов
/A
Файл является текстовым файлом ASCII, то есть конец файла обозначается символом с кодом ASCII 26 (<Ctrl>+<Z>)
/B
Файл является двоичным. Этот ключ указывает на то, что
интерпретатор команд должен при копировании считывать
из источника число байт, заданное размером в каталоге копируемого файла
результат
Каталог для размещения результата копирования и/или имя
создаваемого файла
/V
Проверка правильности копирования путем сравнения файлов после копирования
/Y
Отключение режима запроса подтверждения на замену файлов
/-Y
Включение режима запроса подтверждения на замену файлов
Если не задан целевой файл, команда COPY создаст копию файлаисточника с тем же именем, датой и временем создания, что и исходный
файл, и поместит новую копию в текущий каталог на текущем диске.
Например, для того, чтобы скопировать все файлы из корневого каталога
диска A: в текущий каталог, достаточно выполнить такую команду:
COPY A:\*.*
Например, требуется создать новый текстовый файл и записать в него
символы, введенные с клавиатуры, без использования текстового редактора.
Для решения задачи необходимо ввести команду COPY CON my.txt, которая будет копировать то, что набирается на клавиатуре в файл my.txt (если
этот файл существует, то он перезапишется, иначе – создастся). Для завершения ввода необходимо ввести символ конца файла, то есть нажать клавиши <Ctrl>+<Z>.
Команда COPY может также объединять (склеивать) несколько файлов
в один. Для этого необходимо указать единственный результирующий файл
и несколько исходных. Это достигается путем использования групповых
знаков (? и *) или формата файл1 + файл2 + файл3. Например, для объединения файлов 1.txt и 2.txt в файл 3.txt можно задать следующую команду:
12
COPY 1.txt+2.txt 3.txt
Если имя целевого файла совпадает с именем одного из копируемых
файлов (кроме первого), то исходное содержимое целевого файла теряется.
Если имя целевого файла опущено, то в его качестве используется первый
файл из списка. Например, команда COPY 1.txt+2.txt добавит к содержимому файла 1.txt содержимое файла 2.txt.
Команда COPY имеет и недостатки. Например, с ее помощью нельзя копировать скрытые и системные файлы, файлы нулевой длины, файлы из
подкаталогов. Кроме того, если при копировании группы файлов COPY
встретит файл, который в данный момент нельзя скопировать (например, он
занят другим приложением), то процесс копирования полностью прервется,
и остальные файлы не будут скопированы.
1.1.3.4. Команда XCOPY
Команда XCOPY предоставляет больше возможностей при копировании. Необходимо отметить, что XCOPY может работать только с файлами и
каталогами, но не с устройствами. Синтаксис команды:
XCOPY источник [результат] [ключи]
Команда XCOPY имеет множество ключей, далее приведены лишь некоторых из них.
Ключ /S позволяет копировать все непустые подкаталоги в каталогеисточнике. С помощью же ключа /E можно копировать вообще все подкаталоги, включая и пустые.
Если указан ключ /C, то копирование будет продолжаться даже в случае
возникновения ошибок. Это бывает полезным при операциях копирования,
производимых над группами файлов, например, при резервном копировании
данных.
Ключ /I важен для случая, когда копируются несколько файлов, а файл
назначения отсутствует. При задании этого ключа команда XCOPY считает,
что файл назначения должен быть каталогом. Например, если задать ключ /I
в команде копирования всех файлов с расширением txt из текущего каталога
в несуществующий еще подкаталог TEXT
XCOPY *.txt TEXT /I,
то подкаталог TEXT будет создан.
1.1.3.5. Команда DIR
Команда
DIR [диск:][путь][имя_файла] [ключи]
13
используется для вывода информации о содержимом дисков и каталогов. Параметр [диск:][путь] задает диск и каталог, содержимое которого
нужно вывести на экран. Параметр [имя_файла] определяет файл или группу
файлов, которые нужно включить в список. Например, команда DIR C:\*.bat
выведет на экран все файлы с расширением bat в корневом каталоге диска C.
Если задать эту команду без параметров, то выводится метка диска и его серийный номер, имена файлов и подкаталогов, находящихся в текущем каталоге, а также дата и время их последней модификации. После этого выводится число файлов в каталоге, общий объем (в байтах), занимаемый файлами, и объем свободного пространства на диске.
Ключи команды DIR задают различные режимы расположения, фильтрации и сортировки.
С помощью ключа /A[[:]атрибуты] можно вывести имена только тех каталогов и файлов, которые имеют заданные атрибуты (R – «Только чтение»,
A – «Архивный», S – «Системный», H – «Скрытый», префикс «-» имеет значение НЕ). Если ключ /A используется более чем с одним значением атрибута, будут выведены имена только тех файлов, у которых все атрибуты совпадают с заданными. Например, для вывода имен всех файлов в корневом
каталоге диска C, которые одновременно являются скрытыми и системными,
нужно ввести команду
DIR C:\ /A:HS
а для вывода всех файлов, кроме скрытых – команду
DIR C:\ /A:-H
Отметим, что атрибуту каталога соответствует буква D, и для того, чтобы, например, вывести список всех каталогов диска C, нужно ввести команду
DIR C: /A:D
Ключ /O[[:]сортировка] задает порядок сортировки содержимого каталога при выводе его командой DIR. Если этот ключ опущен, DIR выводит имена файлов и каталогов в том порядке, в котором они содержатся в каталоге.
Если ключ /O задан, а параметр сортировка не указан, то DIR выводит имена
в алфавитном порядке. В параметре сортировка можно использовать следующие значения: N – по имени (алфавитная), S – по размеру (начиная с
меньших), E – по расширению (алфавитная), D – по дате (начиная с более
старых), A – по дате загрузки (начиная с более старых), G – начать список с
каталогов. Префикс «-» означает обратный порядок. Если задается более одного значения порядка сортировки, файлы сортируются по первому критерию, затем по второму и т.д.
Ключ /S означает вывод списка файлов из заданного каталога и его подкаталогов.
14
1.1.3.6. Команды MKDIR и RMDIR
Для создания нового каталога и удаления уже существующего пустого
каталога используются команды MKDIR [диск:]путь и RMDIR [диск:]путь
[ключи] соответственно (или их аналоги MD и RD). Например:
MKDIR "C:\Примеры"
RMDIR "C:\Примеры"
1.1.3.7. Команда DEL
Удалить один или несколько файлов можно с помощью команды
DEL [диск:][путь]имя_файла [ключи]
Для удаления сразу нескольких файлов используются групповые знаки ?
и *. Ключ /S позволяет удалить указанные файлы из всех подкаталогов,
ключ /F – принудительно удалить файлы, доступные только для чтения,
ключ /A[[:]атрибуты] – отбирать файлы для удаления по атрибутам (аналогично ключу /A[[:]атрибуты] в команде DIR).
1.1.3.8. Команда REN
Переименовать файлы и каталоги можно с помощью команды RENAME
(REN). Синтаксис этой команды имеет следующий вид:
REN [диск:][путь][каталог1|файл1] [каталог2|файл2]
Здесь параметр каталог1|файл1 определяет название каталога/файла, которое нужно изменить, а каталог2|файл2 задает новое название каталога/файла. В любом параметре команды REN можно использовать групповые
символы ? и *. При этом представленные шаблонами символы в параметре
файл2 будут идентичны соответствующим символам в параметре файл1.
Например, чтобы изменить у всех файлов с расширением txt в текущем каталоге расширение на doc, нужно ввести такую команду:
REN *.txt *.doc
Если файл с именем файл2 уже существует, то команда REN прекратит
выполнение, и произойдет вывод сообщения, что файл уже существует или
занят. Кроме того, в команде REN нельзя указать другой диск или каталог
для создания результирующих каталога и файла. Для этой цели нужно использовать команду MOVE, предназначенную для переименования и перемещения файлов и каталогов.
1.1.3.9. Команда MOVE
Синтаксис команды для перемещения одного или более файлов имеет
15
вид:
MOVE [/Y|/–Y] [диск:][путь]имя_файла1[,...] результирующий_файл
Синтаксис команды для переименования каталога имеет вид:
MOVE [/Y|/-Y] [диск:][путь]каталог1 каталог2
Здесь параметр результирующий_файл задает новое размещение файла
и может включать имя диска, двоеточие, имя каталога, либо их сочетание.
Если перемещается только один файл, допускается указать его новое имя.
Это позволяет сразу переместить и переименовать файл. Например,
MOVE "C:\Мои документы\список.txt" D:\list.txt
Если указан ключ /-Y, то при создании каталогов и замене файлов будет
выдаваться запрос на подтверждение. Ключ /Y отменяет выдачу такого запроса.
1.1.4. Язык интерпретатора cmd. Командные файлы
Язык оболочки командной строки служит для написания командных
файлов (КФ). Командный файл (или сценарий) в ОС Windows – это текстовый файл с расширением cmd или bat, в котором записаны внешние и внутренние команды ОС, а также некоторые дополнительные команды. Исполнение КФ приводит к тому же результату, что и последовательный ввод записанных в нем команд.
Управление последовательностью выполнения команд КФ осуществляют команды IF, FOR, CALL и GOTO, выполнение которых аналогично работе одноименных операторов языков программирования. Для отключения
дублирования выполняемых команд на экран в начале КФ записывается команда @ECHO OFF. В приводимых ниже примерах КФ для уменьшения
объема данная команда опущена.
1.1.4.1. Параметры командной строки. Команда SHIFT
При запуске КФ в командной строке можно указывать произвольное
число параметров, значения которых можно использовать внутри файла. Это
позволяет, например, применять один и тот же КФ для выполнения команд с
различными исходными данными.
Для доступа из КФ к параметрам командной строки применяются переменные %0, %1, …, %9 или %*. Значением переменной %0 является имя
выполняемого КФ, переменные %1, %2, …, %9 – значения первых девяти
параметров командной строки соответственно, а переменная %* – все аргументы. Если в командной строке при вызове КФ задано меньше девяти параметров, то оставшиеся переменные из %1 – %9 замещаются пустыми
строками.
16
Пример 1.1. Пусть имеется КФ cop.bat:
ECHO Файл %0 копирует каталог %1 в %2
XCOPY %1 %2 /S
Если запустить его из командной строки с двумя параметрами, например
cop.bat C:\Programs D:\Backup, на экран будет выведется сообщение
Файл cop.bat копирует каталог C:\Programs в D:\Backup
и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.
При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT (сдвиг влево),
которая изменяет значения замещаемых параметров с %0 по %9, копируя
каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение
параметра, следующего в командной строке за старым значением %9. Если
же такой параметр не задан, то новым значением %9 будет пустая строка.
Пример 1.2. Пусть КФ my.bat вызван из командной строки следующим
образом:
my.bat p1 p2 p3
Тогда %0=my.bat, %1=p1, %2=p2, %3=p3, параметры %4 – %9 являются
пустыми строками. После выполнения команды SHIFT значения замещаемых параметров изменятся следующим образом: %0=p1, %1=p2, %2=p3, параметры %3 – %9 – пустые строки.
Выполнить обратный сдвиг невозможно – нельзя восстановить параметр
%0, который был первым перед сдвигом.
1.1.4.2. Функции анализа имен файлов
В КФ предусмотрены функции анализа имен файлов и выделения
свойств файла. Для параметра КФ с номером n (%n), задающего имя файла,
допустимы функции, представленные в таблице 1.2.
Таблица 1.2 – Функции анализа имен файлов
Функции
Выделяемое свойство файла
%~Fn
Переменная %n расширяется до полного имени файла
%~Nn
Из переменной %n выделяется только имя файла
%~Xn
Из переменной %n выделяется расширение имени файла
%~Tn
Возвращается дата и время создания (модификации) файла
%~Zn
Возвращается размер файла в байтах
17
Данные функции можно объединять друг с другом, например:
%~NXn – из переменной %n выделяются имя файла и расширение.
Пример 1.3. В каталоге C:\TEXT запущен КФ с параметром test.doc
(%1=test.doc). Размер файла 5150 байт, дата создания 12.12.2017, время
18:57. Тогда применение функций, описанных в таблице 1.2, к параметру %1
даст следующие результаты:
%~F1=C:\TEXT\test.doc
%~N1=test
%~X1=.doc
%~NX1=test.doc
%~T1=12.12.2017 18:57
%~Z1=5150
1.1.4.3. Переменные среды. Команда присваивания SET. Получение
значений переменных
Внутри КФ можно использовать так называемые переменным среды
(или переменные окружения), каждая из которых хранится в оперативной
памяти, имеет свое уникальное имя, а ее значением является строка. Стандартные переменные среды автоматически инициализируются в процессе
загрузки операционной системы. К таким переменным относятся:
WINDIR, которая определяет расположение каталога Windows,
TEMP, которая определяет путь к каталогу для хранения временных
файлов Windows,
PATH, в которой хранится системный путь (путь поиска), то есть список каталогов, в которых система должна искать выполняемые файлы или
файлы совместного доступа.
В КФ с помощью команды присваивания значений SET можно объявлять собственные переменные среды и изменять их значения.
Для получения значения определенной переменной среды нужно заключить имя этой переменной в символы %. Например:
:: new variable NewVar
SET NewVar=new variable
ECHO value of NewVar: %NewVar%
ECHO value of WinDir: %WinDir%
При запуске такого КФ на экран выведутся две строки:
value of NewVar: new variable
value of WinDir: C:\WINDOWS
18
1.1.4.4. Преобразование переменных как строк
С переменными среды в КФ можно производить операции преобразования, используя команду присваивания SET.
Во-первых, над ними можно производить операцию конкатенации (соединения). Для этого нужно в команде SET просто написать рядом значения
соединяемых переменных.
Во-вторых, из переменной среды можно выделять подстроки с помощью
конструкции %имя_переменной:~n1,n2%, где число n1 определяет смещение
(количество пропускаемых символов) от начала (если n1 положительно) или
от конца (если n1 отрицательно) соответствующей переменной среды, а число n2 – количество выделяемых символов (если n2 положительно) или количество последних символов в переменной, которые не войдут в выделяемую
подстроку (если n2 отрицательно). Если указан только один отрицательный
параметр -n, то будут извлечены последние n символов. Например, если в
переменной DATE хранится строка "21.12.2012" (символьное представление
текущей даты), то после выполнения команд
SET dd1=%DATE:~0,2%
SET dd2=%DATE:~0,-8%
SET mm=%DATE:~-7,2%
SET yyyy=%DATE:~-4%
новые переменные будут иметь значения: %dd1%=21, %dd2%=21,
%mm%=12, %yyyy%=2012.
В-третьих, можно выполнять процедуру замены подстрок с помощью
конструкции %имя_переменной:s1=s2%. В результате будет возвращена
строка, в которой каждое вхождение подстроки s1 в соответствующей переменной среды заменено на s2. Например, после выполнения команд
SET a=123456
SET b=%a:23=99%
в переменной b будет храниться строка "199456".
1.1.4.5. Операции с переменными как с числами
Значения переменных среды при выполнении КФ можно рассматривать
как целые числа и производить с ними арифметические вычисления. Для
этого используется команда SET с ключом /A. Ниже приведен пример пакетного файла add2num.bat, складывающего два числа, заданных в качестве
параметров командной строки, и выводящего полученную сумму на экран:
:: Вычисление суммы и запись ее в переменную М
SET /A M=%1+%2
ECHO Сумма %1 и %2 равна %M%
19
В команде SET с ключом /A могут использоваться операции - (вычитание), * (умножение), / (деление нацело), % (остаток от деления). При использовании знака % в качестве знака операции деления в КФ он должен
быть записан ДВАЖДЫ.
Рекомендуется при инициализации числовых переменных использовать
ключ /A
SET /A col=0
1.1.4.6. Ввод значения переменной с клавиатуры
Ввод значения переменной при выполнении КФ выполняется командой
SET с ключом /P. Например, для ввода значения переменной M следует использовать команду
SET /P M=[введите M]
Текст подсказки [введите М] выводится на экран.
1.1.4.7. Связывание времени выполнения для переменных
При использовании группировки команд c помощью круглых скобок
(например, в команде IF) нужно учитывать, что переменные среды в КФ используются в режиме раннего связывания. С точки зрения логики выполнения КФ это может привести к ошибкам. Например, рассмотрим КФ 1.cmd:
SET a=1
ECHO a=%a%
SET a=2
ECHO a=%a%
и КФ 2.cmd:
SET a=1
ECHO a=%a%
(SET a=2
ECHO a=%a% )
:: Использованы () для группировки команд
По логике результаты выполнения КФ файл1 и файл2 должны быть
одинаковыми – на экран должны быть выведены строки: "a=1" и "a=2". Реально так работает только файл1.cmd, а файл 2.cmd два раза выведет строку
"a=1".
Для правильного выполнения КФ, в котором используется группировка
команд, для получения значения переменной вместо знака процента (%)
необходимо использовать восклицательный знак (!) и предварительно включить режим связывания времени выполнения командой SETLOCAL
20
ENABLEDELAYEDEXPANSION. Таким образом, для корректной работы
файл2.cmd должен иметь следующий вид (рекомендуется проверить):
SETLOCAL ENABLEDELAYEDEXPANSION
SET a=1
ECHO a=%a%
(SET a=2
ECHO a=!a!)
1.1.4.8. Прерывание и приостановка выполнения командных файлов
Для того, чтобы вручную прервать выполнение запущенного bat-файла,
нужно нажать клавиши <Ctrl>+<C> или <Ctrl>+<Break>. Часто бывает необходимо программно приостановить выполнение КФ в определенной строке с
выдачей запроса на нажатие любой клавиши. Для этого используется команда PAUSE.
1.1.4.9. Вызов внешних командных файлов. Команда CALL
Из одного КФ можно вызвать другой, указав его имя. Например:
:: Вывод списка log-файлов
DIR C:\*.log
:: Передача выполнения файлу f.bat
f.bat
COPY D:\*.* C:\
PAUSE
В этом случае после выполнения КФ f.bat управление в вызывающий
файл не передается. Для того, чтобы вызвать внешний КФ с возвратом в
первоначальный файл, нужно использовать команду CALL файл. Например:
:: Вывод списка cmd-файлов
DIR C:\*.cmd
::Передача выполнения файлу f.bat
CALL f.bat
COPY D:\*.* C:\
PAUSE
В этом случае после завершения работы файла f.bat управление вернется
в первоначальный файл на строку, следующую за командой CALL (в примере это команда COPY D:\*.* C:\).
21
1.1.4.10. Команда перехода GOTO
КФ может содержать метки и команды GOTO перехода к этим меткам.
Любая строка, начинающаяся с двоеточия :, воспринимается при обработке
КФ как метка.
Пример 1.4. Пусть имеется КФ следующего содержания:
COPY %1 %2
GOTO Label1
ECHO Эта строка никогда не выполнится
:Label1
В команде GOTO можно задавать в качестве метки перехода строку
:EOF, которая передает управление в конец текущего КФ.
Для перехода к метке внутри КФ кроме команды GOTO также можно
использовать и рассмотренная выше команда CALL :метка аргументы.
При выполнении такой команды создается новый контекст текущего КФ
с заданными аргументами, и управление передается на инструкцию, расположенную сразу после метки. Для выхода из такого КФ необходимо два раза
достичь его конца. Первый выход возвращает управление на команду, расположенную сразу после строки CALL, а второй выход завершает выполнение КФ.
1.1.4.11. Команда проверки условия IF
С помощью команды IF … ELSE (ключевое слово ELSE может отсутствовать) в КФ можно выполнять обработку условий двух типов. При этом
если заданное после IF условие принимает истинное значение, система выполняет следующую за условием команду (или несколько команд, заключенных в круглые скобки), в противном случае выполняется команда (или
несколько команд в скобках), следующие за ключевым словом ELSE, так же
как и в языках программирования.
Первый тип условия используется обычно для проверки значения переменной. Для этого применяются два варианта записи оператора IF:
IF [NOT] строка1==строка2 команда1 [ELSE команда2]
(квадратные скобки указывают на необязательность заключенных в них
параметров) или
IF [/I] [NOT] строка1 оператор_сравнения строка2 команда
Условие строка1==строка2 считается истинным при точном совпадении
обеих строк. Параметр NOT указывает на то, что заданная команда выполняется лишь в том случае, когда сравниваемые строки не совпадают.
Для группировки команд могут использоваться круглые скобки. Иногда
использование круглых скобок необходимо для правильной работы команды
22
IF…ELSE, например, для вывода на экран наибольшего из двух параметров,
с которыми запущен КФ, следует использовать оператор
IF %1 GTR %2 (ECHO %1) ELSE (ECHO %2)
Строки могут быть литеральными или представлять собой значения переменных (например, %1 или %TEMP%). Кавычки для литеральных строк
не требуются. Например,
IF %1==%2 ECHO Параметры совпадают!
При сравнении строк, заданных переменными, следует учитывать, что
значение переменной (или параметр командной строки) может оказаться пустой строкой, и тогда выполнение КФ аварийно завершится. Поэтому при
сравнении строк нужно приписывать к ним слева какой-нибудь символ,
например:
IF -%MyVar%==-C:\ ECHO strings equal
С помощью команд IF и SHIFT можно в цикле обработать все параметры командной строки файла. Например, следующий КФ par.cmd выводит на
экран имя запускаемого файла и все параметры командной строки:
ECHO run: %0
:BegLoop
IF -%1==- GOTO ExitLoop
ECHO %1
SHIFT
GOTO BegLoop
:ExitLoop
Если запустить par.bat с двумя параметрами A B, на экран выведется
следующая информация:
run: par.cmd
A
B
Рассмотрим условную команду IF в общем виде:
IF [/I] строка1 оператор_сравнения строка2 команда
Форма записи операторов_сравнения представлена в таблице 1.3.
Таблица 1.3 – Операторы сравнения в команде IF
Оператор
Значение
NEQ
Не равно
LSS
Меньше
LEQ
Меньше или равно
GTR
Больше
GEQ
Больше или равно
23
Ключ /I, если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Например, условие
IF /I AB==ab будет истинным.
Второй способ использования команды IF – это проверка существования
заданного файла. Синтаксис для этого случая имеет вид:
IF [NOT] EXIST файл команда1 [ELSE команда2]
Условие считается истинным, если указанный файл существует. В приведенном примере 1.5 в КФ с помощью команды IF проверяется наличие
файла, указанного в качестве параметра командной строки.
Пример 1.5.
IF -%1==- GOTO NoFileSpecified
IF NOT EXIST %1 GOTO FileNotExist
ECHO file '%1' found
GOTO :EOF
:NoFileSpecified
ECHO in commandstring found no filename
GOTO :EOF
:FileNotExist
ECHO file '%1' not found
1.1.4.12. Организация циклов с помощью команды FOR
Для организации циклов в КФ используется команда FOR, реализующая
следующие функции:
– выполнение заданной команды для всех элементов указанного множества;
– выполнение заданной команды для всех подходящих имен файлов;
– выполнение заданной команды для всех подходящих имен каталогов;
– выполнение заданной команды для определенного каталога, а также
всех его подкаталогов;
– получение последовательности чисел с заданными началом, концом и
шагом приращения;
– чтение и обработка строк из текстового файла;
– обработка строк вывода команды cmd.
Цикл FOR … IN … DO … (выполнение команды для каждого элемента
множества)
Этот вариант команды FOR для КФ имеет вид:
FOR %%переменная IN (множество) DO команда [параметры]
Параметр множество в команде FOR задает одну или более текстовых
строк, которые необходимо обработать с помощью заданной команды.
24
Строки разделяются запятыми. Скобки здесь обязательны. Параметр команда [параметры] задает команду, выполняемую для каждого элемента множества, при этом вложенность команд FOR на одной строке не допускается.
Параметр %%переменная представляет параметр цикла, в качестве которого могут использоваться имена переменных, состоящие из одной буквы.
Цифры использовать нельзя. При выполнении КФ в примере 6 команда FOR
заменяет подставляемую переменную текстом каждой строки в заданном
множестве.
Пример 1.6. Вывод нескольких строк
FOR %%i IN (one, two) DO ECHO %%i
В результате выполнения КФ примера 1.6 на экран будут выведены две
строки:
one
two
Параметр множество в команде FOR может также представлять одну
или несколько групп файлов. Например, чтобы вывести на экран список всех
файлов с расширениями txt или cmd, находящихся в каталоге C:\TEXT, без
использования команды DIR, можно использовать сценарий следующего
содержания:
FOR %%f IN (C:\TEXT\*.txt C:\TEXT\*.cmd) DO ECHO %%f >> list.txt
Цикл FOR /D … IN … DO … (выполнение команды для подкаталогов)
Данный вариант команды FOR реализуется с помощью ключа /D:
FOR /D %переменная IN (набор) DO команда [параметры]
В случае, если набор содержит подстановочные знаки, то команда выполняется для всех подходящих имен каталогов. Например, в результате выполнения сценария
FOR /D %%d IN (C:\*.*) DO ECHO %%d
будет получен список всех каталогов на диске C:
Цикл FOR /R … IN … DO … (выполнение заданной команды для
определенного каталога, а также всех его подкаталогов)
С помощью ключа /R можно задать рекурсию:
FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]
Заданная команда выполняется для каталога [диск:]путь, а также для
всех подкаталогов этого пути. Если после ключа R не указано имя каталога,
то выполнение команды начинается с текущего каталога. Если вместо набора указана только точка (.), то команда проверяет все подкаталоги текущего
каталога. Например, если текущим является каталог C:\TEXT с двумя подкаталогами BOOKS и ARTS, то в результате выполнения КФ
FOR /R %%f IN (.) DO ECHO %%f
на экран выведутся три строки:
C:\TEXT\.
25
C:\TEXT\BOOKS\.
C:\TEXT\ARTS\.
Цикл FOR /L … IN … DO … (получение последовательности чисел с
заданными началом, концом и шагом приращения)
Ключ /L позволяет реализовать с помощью команды FOR цикл со счетчиком, в этом случае команда имеет следующий: вид:
FOR /L % переменная IN (начало, шаг, конец) DO команда [параметры]
Тройка (начало, шаг, конец) заданная после ключевого слова IN определяет последовательность чисел с заданными началом, концом и шагом приращения, которую можно использовать в арифметических вычислениях.
Например, тройка (1, 1, 3) определяет последовательность (1 2 3).
Цикл FOR /F … IN … DO … (чтение и обработка строк из текстового
файла)
FOR /F ["ключи"] %переменная IN (набор) DO команда [параметры]
Параметр набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в разбиении файла на отдельные строки текста и выделении из каждой
строки заданного числа подстрок. Затем найденная подстрока используется
в качестве значения переменной при выполнении тела цикла FOR.
По умолчанию ключ /F выделяет из каждой строки файла первое слово,
очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр "ключи" служит для переопределения заданных по умолчанию правил обработки строк. Ключи представляют собой
заключенную в кавычки строку, содержащую приведенные в таблице 1.4
ключевые слова.
Таблица 1.4 – Ключи команды FOR /F
Ключ
Описание
SKIP=N
Число пропускаемых при обработке строк в начале
файла
DELIMS=XXX
Определение набора разделителей для замены заданных по умолчанию пробела и знака табуляции
TOKENS=X,Y,M-N Определение номеров подстрок, выделяемых из
каждой строки файла и передаваемых для выполнения в тело цикла
При использовании ключа TOKENS=X,Y,M-N создаются дополнительные переменные. Формат M-N представляет собой диапазон подстрок с номерами от M до N. Если последний символ в строке TOKENS= является
звездочкой, то создается дополнительная переменная, значением которой
26
будет весь текст, оставшийся в строке после обработки последней подстроки.
Пример 1.7. КФ для разбора текстового файла myfile.txt:
IF NOT EXIST myfile.txt GOTO :NoFile
FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN (myfile.txt) DO
@ECHO %%i %%j %%k
GOTO :EOF
:NoFile
ECHO myfile.txt not found!
В примере 1.7 в первой строке производится проверка наличия файла
myfile.txt и при его отсутствии выводится сообщение. Команда FOR во второй строке обрабатывает файл myfile.txt следующим образом:
– пропускаются все строки, которые начинаются с символа точки с запятой (EOL=;);
– вторая и третья подстроки из каждой строки передаются в тело цикла,
причем подстроки разделяются пробелами (по умолчанию) и/или запятыми
(DELIMS=,);
– в теле цикла переменная %%i используется для второй подстроки,
%%j – для третьей, а %%k получает все оставшиеся подстроки после третьей.
В нашем примере переменная %%i явно описана в команде FOR, а переменные %%j и %%k описываются неявно с помощью ключа TOKENS=.
Например, если в файле myfile.txt были записаны следующие три строки:
АА BBB CCCC, DDDDD
Е, JJ KKK
;TTTT LLLL МММММ
то в результате выполнения КФ на экран будут выведены две строки:
BBB CCCC DDDDD
JJ KKK
Замечание 1. Ключ TOKENS= позволяет извлечь из одной строки файла
до 26 подстрок, поэтому запрещено использовать имена переменных, начинающиеся не с букв английского алфавита (a–z).
Замечание 2. Имена переменных i, j, k должны следовать в алфавитном
порядке.
Замечание 3. Имена параметров цикла FOR являются глобальными, поэтому одновременно не может быть активно более 26 переменных.
Команда FOR /F позволяет обработать отдельную строку. Для этого следует ввести данную строку в кавычках вместо набора имен файлов в скобках. Строка будет обработана так, как будто она взята из файла. Например,
файл следующего содержания:
27
FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN ("AA CC BB,GG
DD") DO @ECHO %%i %%j %%k
при своем выполнении выведет
CC BB GG DD
Цикл FOR /F … IN (‘команда’) – (обработка строк вывода команды
cmd).
Для обработки строки вывода команды необходимо в скобках ввести
строку вызова команды в апострофах. Строка передается для выполнения
интерпретатору команд cmd, а вывод этой команды записывается в память и
обрабатывается так, как будто строка вывода взята из файла. Например, следующий КФ в примере
Пример 1.8.
ECHO Имена переменных среды:
FOR /F "DELIMS==" %%i IN ('SET') DO ECHO %%i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.
В цикле FOR допускается применение функций анализа имен файлов,
перечисленных в таблице 1.2. Использование функции ~Z показано в примере 1.9.
Пример 1.9. Вычисление суммарной длины всех файлов в заданном
подкаталоге
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A Size = 0
FOR %%I IN (%1\*.*) DO SET /A Size= Size + %%~zI
ECHO %Size%
1.1.4.13. Циклы и связывание времени выполнения для переменных
При обработке переменных среды внутри цикла могут возникать ошибки, связанные с ранним связыванием переменных.
Пример 1.10. Пусть имеется КФ, включающий команды:
SET a=
FOR %%i IN (One,Two,Three) DO SET a=%a%%%i
ECHO a=%a%
В результате его выполнения на экран будет выведена строка "a= Three".
Для исправления ситуации нужно, как и в случае с составными выражениями, вместо знаков процента (%) использовать восклицательные знаки и
предварительно включить режим связывания времени выполнения командой
SETLOCAL ENABLEDELAYEDEXPANSION. Таким образом, приведенный
выше пример следует переписать следующим образом:
SETLOCAL ENABLEDELAYEDEXPANSION
28
SET a=
FOR %%i IN (One,Two,Three) DO SET a=!a!%%i
ECHO a=%a%
1.1.4.14. Команда поиска строк в текстовых файлах FINDSTR
Назначение команды FINDSTR – поиск строк в текстовых файлах. Вызов команды имеет вид:
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:файл]
[/C:строка] [/G:файл] [/D:список_папок] [/OFF[LINE]]
строки [[диск:][путь]имя_файла[ ...]]
Ключи и параметры команды имеют следующие значения:
/L – поиск строк дословно;
/R – поиск строк как регулярных выражений;
/S – поиск файлов в текущем каталоге и всех его подкаталогах;
/I – определяет, что поиск будет вестись без учета регистра;
/X – печатает строки, которые совпадают точно;
/V – печатает строки, не содержащие совпадений с искомыми;
/N – печатает номер строки, в которой найдено совпадение, и ее содержимое;
/M – печатает только имя файла, в которой найдено совпадение;
/O – печатает найденный строки через пустую строку:
/F:файл – читает список файлов из заданного файла (/ для консоли);
/C:строка – использует заданную строку как искомую фразу поиска;
/D:список_папок – поиск в списке папок (разделяются точкой с запятой);
строки – искомые строки;
[диск:][путь]имя_файла – задает имя файла или файлов.
Можно использовать пробелы для разделения нескольких искомых
строк. Например, команда FINDSTR "Привет мир" a.b ищет "Привет" или
"мир" в файле a.b, а команда с ключом /C
FINDSTR /C:"Привет мир" a.b ищет строку "Привет мир" в файле a.b.
Команда FINDSTR c ключом /R дает возможность использовать для задания шаблона поиска несложные регулярные выражения. Краткая справка
по синтаксису регулярных выражений:
. – любой символ;
* – повтор: ноль или более вхождений предыдущего символа или класса;
^ – позиция в строке: начало строки;
$ – позиция в строке: конец строки;
[класс] – класс символов: любой единичный символ из множества;
29
[^класс] – обратный класс символов: любой единичный символ из дополнения;
[x-y] – диапазон: любые символы из указанного диапазона, например [01] – двоичная цифра, [a-z] – строчная буква латинского алфавита;
\x – служебный символ: символьное обозначение служебного символа x
(символ \ называется экранирующим. Например \. означает точку, а не любой один символ строки);
\<xyz – позиция в слове: в начале слова;
xyz\> – позиция в слове: в конце слова.
Пример 1.11. КФ для подсчета количества строк в файле num.txt, в которых присутствует хотя бы одна двоичная цифра.
SET /a kol=0
FOR /f %%b IN ('FINDSTR /RS:"[0-1]" num.txt') DO SET /a kol=kol+1
ECHO %kol%
1.2. МЕТОДИКА ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
1. Запустить командный интерпретатор cmd.
2. Увеличить размер окна интерпретатора и задать цвет фона и цвет
шрифта (рекомендуется синий фон и белый шрифт). Объявить текущим каталогом каталог C:\Мои документы (или другой каталог по указанию преподавателя).
3. Без использования текстового редактора создать список из 4 – 5 слов
(например, фамилий Иванов, Петров, Сидоров, Яшин, Авдеев) и записать
его в файл my.txt (используя пример из п. 1.1.3.3). Отсортировать список в
алфавитном порядке и сохранить его в новом файле myout.txt.
Замечание 1. При создании текстового файла командный интерпретатор
использует кодировку кириллица (DOS) – кодовая страница 866. Поэтому
рекомендуется переназначать вывод в файл с расширением .txt, а для просмотра содержимого файла использовать Internet Explorer, указав вид кодировки кириллица (DOS). При просмотре файла в приложении Блокнот следует установить шрифт Terminal. Для правильного отображения русских
букв в терминальном окне можно ввести команду MODE CON CP
SELECT=1251>NUL 2>NUL.
Замечание 2. Командный интерпретатор хранит историю введенных
команд в буфере (размером 50 строк). Для просмотра содержимого буфера
используйте клавиши клавиатуры СТРЕЛКА ВВЕРХ и СТРЕЛКА ВНИЗ.
Полученную команду можно отредактировать и выполнить повторно.
4. Разработать одну команду для создания одного текстового файла
com.txt, содержащего справочные сведения по командам DIR, COPY,
XCOPY и TASKLIST. Ознакомиться с назначением, ключами и возможно30
стями команды TASKLIST, эта команда понадобится при выполнении заданий 5, 6 и 7.
5. Номер выполняемого задания определяется последней цифрой порядкового номера студента в подгруппе, выполняющей лабораторную работу.
5.1. Для студентов 1 и 2. Вывести на экран список выполняющихся процессов, упорядоченный в алфавитном порядке.
5.2. Для студентов 3 и 4. Вывести на экран список выполняющихся процессов, упорядоченный по возрастанию PID (идентификаторов процессов).
5.3. Для студентов 5 и 6. Вывести на экран список выполняющихся процессов, упорядоченный по возрастанию объема используемой памяти.
5.4. Для студентов 7 и 8. Вывести на экран список выполняющихся процессов, использующих модуль esent.dll.
5.5. Для студентов 9 и 0. Вывести на экран список выполняющихся процессов, использующих память объемом более 3 Мб.
6. Вывести на экран список выполняющихся процессов, запущенных
операционной системой.
7. Вывести на экран список выполняющихся процессов, запущенных
пользователем.
8. Вывести содержимое указанного в таблице 1.5 каталога по указанному формату на экран.
Таблица 1.5 – Варианты задания 8 для студентов
Номера
Имя каталога
Что
Сортировать Атрибуты
студенвыводить
по
файлов и
тов
каталогов
1, 6
C:\Windows
Только файлы По размеру Системный
2, 7
C:\Windows
Файлы и подПо дате
Скрытый
каталоги
3, 8
C:\Windows
Только подкаИменам
Только
талоги
чтение
4, 9
C:\Windows и
Только файлы По размеру
Любые
все подкаталоги
bmp
5, 0
C:\Windows и
Только файлы
Именам
Любые
все подкаталоги
jpg
9. Создать в каталоге C:\Мои документы подкаталог WinGraf и сделать
этот подкаталог текущим.
10. Скопировать имеющиеся в каталоге Windows и его подкаталогах
растровые графические файлы (имеющие расширения .bmp, .jpg, .gif, .png) в
каталог WinGraf в соответствии с таблицей 1.6. После завершения операции
копирования найти общее количество скопированных файлов и каталогов.
31
Таблица 1.6 – Варианты задания 10 для студентов
Номера
Типы графических файлов
студентов
1, 4
bmp, jpg
2, 5
png, gif
3, 6
jpg, gif
8, 9
bmp, png
7, 0
jpg, png
11. Удалить из каталога C:\Мои документы файлы my.txt, myout.txt и
подкаталог WinGraf.
12. Номер выполняемого задания определяется последней цифрой порядкового номера студента в подгруппе, выполняющей лабораторную работу.
12.1. Для студентов 1 и 0. Разработать и выполнить КФ, выполняющий
вывод на экран имен всех файлов с указанным расширением, находящихся в
каталоге, имя которого задается при запуске КФ первым параметром. Расширение файлов задается вторым параметром. Полученный КФ должен состоять из одной строки.
12.2. Для студентов 2 и 9. Разработать и выполнить КФ, который среди
введенных с клавиатуры целых чисел (использовать SET /P) находит
наибольшее и наименьшее число. Признак конца ввода – знак -. Для организации цикла использовать команду GOTO.
12.3. Для студентов 3 и 8. Разработать и выполнить КФ, который в заданном каталоге и его подкаталогах находит общее количество подкаталогов. На экран вывести только требуемый результат. Использовать цикл FOR
/D.
12.4. Для студентов 4 и 6. Разработать и выполнить КФ, который в каталогах, имена которых заданы первым и вторым параметрами КФ, находит и
выводит на экран имена файлов (расширения могут быть любые), присутствующих как в первом, так и во втором каталогах. Использовать один FOR
и IF для проверки присутствия файла во втором каталоге.
12.5. Для студентов 5 и 7. Разработать и выполнить КФ, который вычисляет и выводит на экран значение факториала целого числа, задаваемого при
запуске КФ. Предусмотреть проверку заданного значения и при задании отрицательного значения или значения, превышающего максимально допустимую величину, выводить соответствующие сообщения. Использовать
FOR /L.
13. Разработать и выполнить КФ в соответствии с таблицей 1.7.
32
Таблица 1.7 – Варианты задания 13 для студентов
№
Действия, выполняемые КФ
студ.
1
1. Подсчет количества целых чисел в текстовом файле. Считать,
что слова в файле записаны в формате одно или два слова в строке
через пробел(ы). Слово – это целое число (состоящее из десятичных цифр) или последовательность букв латинского алфавита,
начинающаяся с буквы или цифры. Имя файла задается первым
параметром КФ.
2. Вывод на экран списка файлов, хранящихся в указанном первым параметром командной строки каталоге и созданных в первом полугодии (месяцы 1-6) года, указанного вторым параметром.
2
1. В каталоге, указанном первым параметром КФ (и его подкаталогах), найти файл наибольшего размера с расширением, указанным вторым параметром КФ. Вывести имя и размер файла.
2. В каталоге, указанном первым параметром КФ (и его подкаталогах), найти три файла самого большого размера. Вывести имена
файлов, их размеры и даты создания.
3
1. В каталоге, указанном первым параметром КФ, найти файлы,
имеющие размер более значения, заданного вторым параметром
КФ и скопировать их в отдельный подкаталог.
2. В каталоге, указанном первым параметром КФ (и его подкаталогах), найти суммарный объем файлов, имеющих расширение,
указанное вторым параметром КФ.
4
1. Удаление из каталога, заданного первым параметром, файлов,
которые присутствуют и в каталоге, указанным вторым параметром. Перед удалением файлы скопировать в каталог, указанный
третьим параметром КФ.
2. В каталоге, указанном первым параметром КФ, и его подкаталогах, найти файлы, созданные во второй половине рабочего дня
(после 14 часов), скопировать их в отдельный подкаталог.
5
1. Нахождение суммарного объема файлов с атрибутом «только
чтение», хранящихся в каталоге, имя которого задано первым параметром КФ.
2. Проверить наличие файла Numb.txt в каталоге, указанном первым параметром КФ. В этом файле записаны целые и вещественные числа по формату одно число в строке. Прочитать целые числа из файла, найти их сумму и вывести числа и их сумму на экран.
Найти количество вещественных чисел и вывести найденное значение на экран.
33
6
7
8
9
0
34
1. Среди выполняющихся на ПК программ найти и вывести на
экран имя программы, использующей наибольший объем памяти.
2. Проверка наличия на диске в каталоге, указанном первым параметром КФ, файла FNames.txt, содержащего список имен файлов
и подкаталогов. Если он есть – проверка наличия перечисленных в
списке файлов и вывод имен отсутствующих. Если файла FNames
нет, создание его и запись имен файлов и подкаталогов.
1. Вывод списка файлов с расширением dll (хранящихся на доступном диске), созданных до 12.2017 размером до 12000 байтов.
2. Проверка наличия на диске в каталоге, указанном первым параметром КФ, файла Numbers.txt, содержащего 2 столбца целых чисел, столбцы располагаются с позиций 2 и 20 и отделены пробелами. Если файла нет – вывод сообщения. Если файл есть, создать
новый файл, содержащий три столбца, в третий поместить сумму
чисел из двух первых столбцов.
1. Просмотр содержимого каталога, указанного первым параметром КФ. Необходимо: создать подкаталоги с именами EXE, TXT,
CMD, DOC и OTHER; в каждый подкаталог скопировать файлы с
соответствующими расширениями; пустые подкаталоги удалить.
2. Среди выполняющихся на ПК программ найти и вывести на
экран имена пяти программ, использующих наибольшее количество времени CPU.
Среди выполняющихся на ПК программ найти имена программ,
запущенных системой.
2. Подсчет количества положительных и отрицательных чисел
целых чисел в текстовом файле. Считать, что слова в файле записаны в формате одно слово в строке. Имя файла задается первым
параметром КФ.
1. Подсчет количества слов в текстовом файле, содержащем целые
числа и слова русского и английского языков. Считать, что слова
в файле записаны в формате одно слово в строке. Число – это целое число, состоящее из десятичных цифр. Слово – последовательность букв латинского (или русского) алфавитов. Имя файла
задается первым параметром КФ.
2. Просмотр содержимого каталога, указанного первым параметром КФ. Необходимо: создать подкаталоги с именами 1, 2, ..., 12; в
каждый подкаталог скопировать файлы, созданные в соответствующие месяцы; пустые подкаталоги удалить.
Отчеты по лабораторной работе – индивидуальные, должны содержать
команды cmd для выполнения заданий 2 – 11 и КФ для выполнения заданий
12 и 13 на компьютере. При защите отчета по лабораторной работе студент
должен ответить на контрольные вопросы по выбору преподавателя.
1.3. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Настраиваемые свойства интерпретатора cmd.
2. Различие между внутренними и внешними командами. Примеры
внешних и внутренних команд.
3. Структура команды интерпретатора.
4. Получение информации о конкретной команде.
5. Групповые символы (шаблоны) и их использование.
6. Перенаправление ввода/вывода и конвейеризация команд.
7. Условное выполнение и группировка команд. Назначение символов
&, &&, || и () .
8. Команды для работы с файловой системой – названия и возможности.
9. Достоинства и недостатки команд COPY и XCOPY. Использованные
в работе ключи команды XCOPY.
10. Назначение команды ECHO и примеры ее использования.
11. Команда DIR. Назначение. Ключи команды DIR и их использование.
12. Назначение команды TASKLIST. Состав выводимой информации.
Используемые ключи и параметры.
13. Использование параметров командной строки. Команда Shift.
14. Операции со строковыми и числовыми переменными. Команда SET.
15. Проверка существования заданного файла.
16. Операторы перехода и вызова.
17. Выполнение заданной команды для всех элементов указанного множества.
18. Выполнение заданной команды для всех подходящих имен файлов.
19. Выполнение заданной команды для определенного каталога, а также
всех его подкаталогов.
20. Получение последовательности чисел с заданными началом, концом
и шагом приращения.
21. Чтение и обработка строк из текстового файла.
22. Команда FINDSTR. Назначение. Ключи. Использование регулярных
выражений в команде. Задание и использование класса цифр и класса букв.
23. Символы, используемые в регулярных выражениях. Правила использования.
24. Какое минимальное количество строк (включая @ECHO OFF) дол35
жен иметь КФ, выводящий на экран минимальное значения двух числовых
аргументов?
25. Какое минимальное количество строк (включая @ ECHO OFF) должен иметь КФ, выводящий на экран минимальное значения трех числовых
аргументов?
ЛАБОРАТОРНАЯ РАБОТА № 2
ВВОД – ВЫВОД ДАННЫХ В ФАЙЛЫ И РАБОТА С ОС WINDOWS
СРЕДСТВАМИ ОБОЛОЧКИ WINDOWS POWERSHELL
Цель работы: изучение возможностей оболочки Windows PowerShell,
приобретение навыков самостоятельной работы с оболочкой PowerShell.
2.1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
2.1.1. Цели и задачи создания оболочки PowerShell
Новая оболочка Windows PowerShell была задумана разработчиками
Microsoft как более мощная среда для написания сценариев и работы из командной строки. Разработчики PowerShell преследовали несколько целей,
главная из которых – создание среды составления сценариев, которая
наилучшим образом подходила бы для современных версий ОС Windows и
была бы более функциональной, расширяемой и простой в использовании,
чем какой-либо аналогичный продукт для любой другой ОС. В первую очередь, эта среда должна была подходить для решения задач, стоящих перед
системными администраторами, а также удовлетворять требованиям разработчиков программного обеспечения, предоставляя им средства для быстрой
реализации интерфейсов управления к создаваемым приложениям.
Для достижения этих целей были решены следующие задачи:
– Обеспечение прямого доступа из командной строки к объектам COM,
WMI и .NET. В новой оболочке присутствуют команды, позволяющие в интерактивном режиме работать с COM-объектами, а также с экземплярами
классов, определенных в информационных схемах WMI и .NET.
– Организация работы с произвольными источниками данных в командной строке по принципу файловой системы. Например, навигация по системному реестру или хранилищу цифровых сертификатов выполняется из
командной строки с помощью аналога команды CD интерпретатора cmd.
– Разработка интуитивно понятной унифицированной структуры встроенных команд, основанной на их функциональном назначении. В новой оболочке имена всех внутренних команд (в PowerShell они называются команд36
летами) соответствуют шаблону «глагол-существительное», например, GetProcess (получить информацию о процессе), Stop-Service (остановить службу), Clear-Host (очистить экран консоли) и т.д. Для одинаковых параметров
внутренних команд используются стандартные имена, структура параметров
во всех командах идентична, все команды обрабатываются одним синтаксическим анализатором. В результате облегчается запоминание и изучение команд.
– Обеспечение возможности расширения встроенного набора команд.
Внутренние команды PowerShell могут дополняться командами, создаваемыми пользователем. При этом они полностью интегрируются в оболочку,
информация о них может быть получена из стандартной справочной системы PowerShell.
– Организация поддержки знакомых команд из других оболочек.
В PowerShell на уровне псевдонимов собственных внутренних команд поддерживаются наиболее часто используемые стандартные команды из оболочки cmd и Unix-оболочек. Например, если пользователь, привыкший работать с Unix-оболочкой, выполнит команду ls, то он получит ожидаемый результат: список файлов в текущем каталоге (то же самое относится к команде DIR).
– Разработка полноценной встроенной справочной системы для внутренних команд. Для большинства внутренних команд в справочной системе
дано подробное описание и примеры использования. В любом случае встроенная справка по любой внутренней команде будет содержать краткое описание всех ее параметров.
– Реализация автоматического завершения при вводе с клавиатуры имен
команд, их параметров, а также имен файлов и папок. Данная возможность
значительно упрощает и ускоряет ввод команд с клавиатуры.
Главной особенностью среды PowerShell, отличающей ее от всех других
оболочек командной строки, является то, что единицей обработки и передачи информации здесь является объект, а не строка текста.
2.1.2. Отличие PowerShell от других оболочек – ориентация на объекты
При разработке любого языка программирования одним из основных
является вопрос о том, какие типы данных и каким образом будут в нем
представлены. При создании PowerShell разработчики решили не изобретать
ничего нового и воспользоваться унифицированной объектной моделью
.NET.
Рассмотрим пример. В командном интерпретаторе cmd есть команда
TASKLIST, которая выдает информацию о процессах, запущенных в системе (рисунок 2.1).
37
Предположим, что мы в командном файле интерпретатора cmd с помощью этой команды хотим определить, сколько оперативной памяти использует процесс smss.exe. Для этого нужно выделить из выходного потока команды TASKLIST соответствующую строку, извлечь из нее подстроку, содержащую нужное число и убрать пробелы между разрядами. В PowerShell
задача решается с помощью командлета Get-Process, который возвращает
коллекцию объектов, каждый из которых соответствует одному запущенному процессу. Для определения размера памяти, используемой процессом
smss.exe, нет необходимости в дополнительных манипуляциях с текстом,
достаточно просто взять значение свойства WS объекта, соответствующего
данному процессу.
Рисунок 2.1 – Фрагмент результата выполнения команда TASKLIST
Объектная модель .NET позволяет PowerShell напрямую использовать
функциональность различных библиотек, являющихся частью платформы
.NET. Например, чтобы узнать, каким днем недели было 9 ноября 1977 года,
в PowerShell можно выполнить следующую команду:
(Get-Date "09.11.1974").DayOfWeek.TostRing()
В этом случае команда Get-Date возвращает .NET-объект DateTime,
имеющий свойство DayOfWeek, при обращении к которому вычисляется
день недели для соответствующей даты.
38
2.1.3. Запуск оболочки PowerShell. Выполнение команд
Для запуска оболочки следует выбрать пункт «Выполнить» («Run») в
меню «Пуск» («Start»), ввести имя файла powershell и нажать кнопку «OK».
В результате откроется новое окно (рисунок 2.2), в котором можно вводить
команды и видеть результаты их работы.
Рисунок 2.2 – Командное окно оболочки PowerShell в Windows 10
Выполним первую команду в PowerShell. Введем команду Get-Process –
список выполняющихся процессов (команды в PowerShell вводятся без учета
регистра). На экран будет выведен список выполняющихся процессов.
Предыстория введенных команд работает также, как в интерпретаторе
cmd.
2.1.4. Типы команд PowerShell
В оболочке PowerShell поддерживаются команды четырех типов: командлеты, функции, сценарии и внешние исполняемые файлы.
Первый тип – так называемые командлеты (cmdlet). Этот термин используется только внутри PowerShell. Командлет – аналог внутренней команды интерпретатора командной строки, представляет собой класс .NET,
порожденный от базового класса Cmdlet. Разрабатываются командлеты с
помощью пакета PowerShell Software Developers Kit (SDK). Единый базовый
класс Cmdlet гарантирует совместимый синтаксис всех командлетов, а также
автоматизирует анализ параметров командной строки и описание синтаксиса
командлетов для встроенной справки. Командлеты рассматриваются в данном лабораторном практикуме. С командами других типов можно ознакомиться в литературе по оболочке PowerShell.
Данный тип команд компилируется в динамическую библиотеку (DLL)
и подгружается к процессу PowerShell во время запуска оболочки (то есть
сами по себе командлеты не могут быть запущены как приложения, но в них
содержатся исполняемые объекты). Командлеты – это аналог внутренних
команд традиционных оболочек.
Следующий тип команд – функции. Функция – это блок кода на языке
39
PowerShell, имеющий название и находящийся в памяти до завершения текущего сеанса командной оболочки. Функции, как и командлеты, поддерживают именованные параметры. Анализ синтаксиса функции производится
один раз при ее объявлении.
Сценарий – это блок кода на языке оболочки PowerShell, хранящийся во
внешнем файле с расширением ps1. Анализ синтаксиса сценария производится при каждом его запуске.
Последний тип команд – внешние исполняемые файлы, которые выполняются обычным образом операционной системой.
2.1.5. Имена и синтаксис командлетов
В PowerShell аналогом внутренних команд являются командлеты. Командлеты могут быть очень простыми или очень сложными, но каждый из
них разрабатывается для решения одной, узкой задачи. Работа с командлетами становится по-настоящему эффективной при использовании их композиции (конвейеризации объектов между командлетами).
Команды Windows PowerShell следуют определенным правилам именования:
– Команды Windows PowerShell состоят из глагола и существительного
(всегда в единственном числе), разделенных тире. Глагол задает определенное действие, а существительное определяет объект, над которым это действие будет совершено. Команды записываются на английском языке. Пример: Get-Help
вызывает интерактивную справку по синтаксису Windows
PowerShell.
– Перед параметрами ставится символ «-». Например: Get-Help Detailed.
– В Windows PowerShell также включены псевдонимы многих известных
команд. Это упрощает изучение и использование Windows PowerShell. Пример: команды HELP (классический стиль Windows) и MAN (классический
стиль Unix) работают так же, как и Get-Help.
Например, Get-Process (получить информацию о процессе), Stop-Service
(остановить службу), Clear-Host (очистить экран консоли) и т. д. Чтобы просмотреть список командлетов, доступных в ходе текущего сеанса, нужно
выполнить командлет Get-Command. По умолчанию командлет GetCommand выводит сведения в четырех столбцах: CommandType, Name, Version и Source.
Замечание. Символы наклонная черта (/ и \) вместе с параметрами в
оболочке Windows PowerShell не используются.
В общем случае синтаксис командлетов имеет следующую структуру:
имя_командлета -параметр1 -параметр2 аргумент1 аргумент2
40
Здесь параметр1 – параметр (переключатель), не имеющий значения;
параметр2 – имя параметра, имеющего значение аргумент1; аргумент2 –
значение параметра, не имеющего имени. Например, командлет Get-Process
имеет параметр Name, который определяет имя процесса, информацию о
котором нужно вывести. Имя этого параметра указывать необязательно. Таким образом, для получения сведений о процессе Far можно ввести либо команду Get-Process -Name Far, либо команду Get-Process Far.
2.1.6. Автоматическое завершение ввода команд
Находясь в оболочке PowerShell, можно ввести часть какой-либо команды, нажать клавишу <Tab>, и система попытается сама завершить ввод этой
команды.
Подобное автоматическое завершение срабатывает, во-первых, для имен
файлов и путей файловой системы. При нажатии клавиши <Tab> PowerShell
автоматически расширит частично введенный путь файловой системы до
первого найденного совпадения. При повторении нажатия клавиши <Tab>
производится циклический переход по имеющимся возможностям выбора.
Также в PowerShell реализована возможность автоматического завершения
путей файловой системы на основе шаблонных символов ? и *. Например,
если ввести команду CD C:\Pro*Files и нажать клавишу <Tab>, то в строке
ввода появится команда CD 'C:\Program Files'.
Во-вторых, в PowerShell реализовано автозавершение имен командлетов
и их параметров. Если ввести первую часть имени командлета (глагол) и дефис, нажать после этого клавишу <Tab>, то система подставит имя первого
подходящего командлета (следующий подходящий вариант имени выбирается путем повторного нажатия <Tab>). Аналогичным образом автозавершение срабатывает для частично введенных имен параметров командлета:
нажимая клавишу <Tab>, мы будем циклически перебирать подходящие
имена.
Наконец, PowerShell позволяет автоматически завершать имена используемых переменных (объектов) и имена свойств объектов.
2.1.7. Псевдонимы команд
Механизм псевдонимов, реализованный в оболочке PowerShell, дает
возможность пользователям выполнять команды по их альтернативным
именам (например, вместо команды Get-Childitem можно пользоваться псевдонимом DIR). В PowerShell заранее определено много псевдонимов, можно
также добавлять собственные псевдонимы в систему.
Псевдонимы в PowerShell делятся на два типа. Первый тип предназна41
чен для совместимости имен с разными интерфейсами. Псевдонимы этого
типа позволяют пользователям, имеющим опыт работы с другими оболочками (cmd или Unix-оболочки), использовать знакомые им имена команд для
выполнения аналогичных операций в PowerShell, что упрощает освоение
новой оболочки, позволяя не тратить усилий на запоминание новых команд
PowerShell. Например, пользователь хочет очистить экран. Если у него есть
опыт работы с cmd, то он, естественно, попробует выполнить команду CLS.
PowerShell при этом выполнит командлет Clear-Host, для которого CLS является псевдонимом и который выполняет требуемое действие – очистку
экрана. Для пользователей cmd в PowerShell определены псевдонимы CD,
CLS, COPY, DEL, DIR, ECHO, ERASE, MOVE, POPD, PUSHD, REN,
RMDIR, SORT, TYPE; для пользователей Unix – псевдонимы CAT, CHDIR,
CLEAR, DIFF, H, HISTORY, KILLl, LP, LS, MOUNT, PS, PWD, R, RM,
SLEEP, TEE, WRITE. Узнать, какой именно командлет скрывается за знакомым псевдонимом, можно с помощью командлета Get-Alias.
Псевдонимы второго типа (стандартные псевдонимы) в PowerShell
предназначены для быстрого ввода команд. Такие псевдонимы образуются
из имен командлетов, которым они соответствуют. Например, глагол Get
сокращается до G, глагол Set сокращается до S, существительное Location
сокращается до L и т.д. Таким образом, командлету Set-Location соответствует псевдоним SL, а командлету Get-Location – псевдоним GL.
Просмотреть список всех пседонимов, объявленных в системе, можно с
помощью командлета Get-Alias без параметров. Определить собственный
псевдоним можно с помощью командлета Set-Alias.
2.1.8. Справочная система PowerShell
В PowerShell предусмотрено несколько способов получения справочной
информации внутри оболочки.
Краткую справку по одному командлету можно получить с помощью
параметра ? (вопросительный знак), указанного после имени этого командлета. Напомним, что перед параметром ? следует ввести символ «-».
Вместо HELP или MAN в Windows PowerShell можно также использовать команду Get-Help. Ее синтаксис описан ниже:
– Get-Help выводит на экран справку об использовании справки;
– Get-Help * перечисляет все команды Windows PowerShell;
– Get-Help команда выводит справку по соответствующей команде;
– Get-Help команда -Detailed выводит подробную справку с примерами
команды.
Использование команды HELP для получения подробных сведений о
команде HELP:
42
– Get-Help;
– Get-Help -Detailed.
Команда Get-Help позволяет просматривать справочную информацию не
только о разных командлетах, но и о синтаксисе языка PowerShell, о псевдонимах и т. д.
Например, чтобы прочитать справочную информацию об использовании
массивов в PowerShell, нужно выполнить следующую команду: Get-Help
About_Array.
Командлет Get-Help выводит содержимое раздела справки на экран сразу целиком. Функции MAN и HELP позволяют выводить справочную информацию поэкранно (аналогично команде MORE интерпретатора cmd),
например: MAN About_Array.
2.1.9. Конвейеризация и управление выводом команд PowerShell
В лабораторной работе № 1 было рассмотрено понятие конвейеризации
(или композиции) команд интерпретатора cmd, когда выходной поток одной
команды перенаправлялся во входной поток другой, объединяя тем самым
две команды вместе. Подобные конвейеры команд используются в большинстве оболочек командной строки и являются средством, позволяющим передавать данные между разными процессами. Механизм композиции команд
представляет собой, вероятно, наиболее ценную концепцию, используемую
в интерфейсах командной строки. Конвейеры не только снижают усилия,
прилагаемые при вводе сложных команд, но и облегчают отслеживание потока работы в командах.
В оболочке PowerShell также очень широко используется механизм конвейеризации команд, однако здесь по конвейеру передается не поток текста,
как во всех других оболочках, а объекты. При этом с элементами конвейера
можно производить различные манипуляции: фильтровать объекты по определенному критерию, сортировать и группировать объекты, изменять их
структуру. Ниже мы подробнее рассмотрим операции фильтрации и сортировки элементов конвейера.
2.1.9.1. Конвейеризация объектов в PowerShell
Конвейер в PowerShell – это последовательность команд, разделенных
между собой знаком | (вертикальная черта). Каждая команда в конвейере
получает объект от предыдущей команды, выполняет определенные операции над ним и передает следующей команде в конвейере. С точки зрения
пользователя, объекты упаковывают связанные данные в форму, в которой
43
ими проще манипулировать как единым блоком, и из которой при необходимости извлекаются определенные элементы.
Передача данных между командами в виде объектов имеет большое
преимущество над обычным обменом посредством потока текста. Ведь команда, принимающая поток текста от другой утилиты, должна его проанализировать, разобрать и выделить нужную ей информацию, а это может быть
непросто, так как обычно вывод команды больше ориентирован на визуальное восприятие человеком (это естественно для интерактивного режима работы), а не на удобство последующего синтаксического разбора.
При передаче по конвейеру объектов этой проблемы не возникает, здесь
нужные данные извлекаются из элемента конвейера простым обращением к
соответствующему свойству объекта. Однако возникает новый вопрос, каким образом узнать, какие именно свойства есть у объектов, передаваемых
по конвейеру? Ведь при выполнении того или иного командлета мы на
экране видим только одну или несколько колонок отформатированного текста.
Пример. Запустим командлет Get-Process, который выводит информацию о запущенных в системе процессах (рисунок 2.3).
Рисунок 2.3 – Фрагмент результата выполнения командлета Get-Process
Фактически на экране мы видим только сводную информацию (результат форматирования полученных данных), а не полное представление выходного объекта. Из этой информации непонятно, сколько точно свойств
имеется у объектов, генерируемых командой Get-Process, и какие имена
44
имеют эти свойства. Например, мы хотим найти все «зависшие» процессы,
которые не отвечают на запросы системы. Можно ли это сделать с помощью
командлета Get-Process, какое свойство нужно проверять у выводимых объектов?
Для ответа на подобные вопросы нужно научиться исследовать структуру объектов PowerShell, узнавать, какие свойства и методы имеются у этих
объектов.
2.1.9.2. Просмотр структуры объектов
Для анализа структуры объекта, возвращаемого определенной командой, проще всего направить этот объект по конвейеру на командлет GetMember (псевдоним GM), пример показан на рисунке 2.4.
Рисунок 2.4 – Фрагмент результата просмотра структуры объекта
Здесь мы видим имя .NET-класса, экземпляры которого возвращаются в
ходе работы рассматриваемого командлета (в нашем примере это класс
System.Diagnostic.Process), а также полный список элементов объекта. Интересующее нас свойство Responding, определяющего «зависшие» процессы,
45
находится ближе к концу списка. При этом на экран выводится очень много
элементов, просматривать их неудобно. Командлет Get-Member позволяет
перечислить только те элементы объекта, которые являются его свойствами.
Для этого используется параметр MemberType со значением Properties:
Get-Process | Get-Member -MemberType Property.
Процессам ОС соответствуют объекты, имеющие очень много свойств,
на экран же при работе командлета Get-Process выводятся лишь несколько
из них. Способы отображения объектов различных типов задаются конфигурационными файлами в формате XML, находящимися в каталоге, где установлен файл powershell.exe.
Рассмотрим наиболее часто используемые операции над элементами
конвейера: фильтрации и сортировки.
2.1.9.3. Фильтрация объектов в конвейере
В PowerShell поддерживается возможность фильтрации объектов в конвейере, т. е. удаление из конвейера объектов, не удовлетворяющих определенному условию. Данную функциональность обеспечивает командлет
Where-Object, позволяющий проверить каждый объект, находящийся в конвейере, и передать его дальше по конвейеру, только если объект удовлетворяет условиям проверки.
Например, для вывода информации о «зависших» процессах (объекты,
возвращаемые командлетом Get-Process, у которых свойство Responding
равно False) можно использовать следующий конвейер:
Get-Process | Where-Object {-NOT $_.Responding}.
Другой пример – оставим в конвейере только те процессы, у которых
значение идентификатора (свойство Id) больше 1000:
Get-Process | Where-Object {$_.Id -GT 1000}.
В блоках сценариев командлета Where-Object для обращения к текущему объекту конвейера и извлечения нужных свойств этого объекта используется специальная переменная $_, которая создается оболочкой PowerShell
автоматически. Данная переменная используется и в других командлетах,
производящих обработку элементов конвейера.
Условие проверки в Where-Object задается в виде блока сценария – одной или нескольких команд PowerShell, заключенных в фигурные скобки {}.
Результатом выполнения данного блока сценария должно быть значение логического типа: True (истина) или False (ложь). Как можно понять из примеров, в блоке сценария используются специальные операторы сравнения.
Замечание. В PowerShell для операторов сравнения не используются
обычные символы > или <, так как в командной строке они обычно означают
перенаправление ввода/вывода.
46
Основные операторы сравнения приведены в таблице 2.1.
Таблица 2.1 – Операторы сравнения в PowerShell
Оператор
Значение
Пример (возвращает True)
-EQ
равно
8 -EQ 8
-NE
не равно
9 -NE 10
-LT
меньше
3 -LT 4
-LE
меньше или равно
3 -LE 4
-GT
больше
4 -GT 3
-GE
больше или равно
4 -GE 3
-LIKE
сравнение на сов"file.doc" -LIFE "f*.doc"
падение с учетом
подстановочного
знака в тексте
-NOTLIKE
сравнение на не"file.doc" -NOTLIKE "f*.rtf"
совпадение с учетом подстановочного знака в тексте
-CONTAINS
содержит
1,2,3 -CONTAINS 1
-NOTCONTAINS не содержит
1,2,3 -NOTCONTAINS 4
Операторы сравнения можно соединять друг с другом с помощью логических операторов, приведенных в таблице 2.2.
Таблица 2.2 – Логические операторы в PowerShell
Оператор
Значение
Пример (возвращает True)
-AND
логическое И
(10 -EQ 10) -AND (1 -EQ 1)
-OR
логическое ИЛИ
(9 -NE 10) -OR (3 -EQ 4)
-NOT
логическое НЕ
-NOT (3 -GT 4)
!
логическое НЕ
!(3 -GT 4)
2.1.9.4. Сортировка объектов
Сортировка элементов конвейера – еще одна операция, которая часто
применяется при конвейерной обработке объектов. Данную операцию осуществляет командлет Sort-Object, ему передаются имена свойств, по которым нужно произвести сортировку, а он возвращает данные, упорядоченные
по значениям этих свойств.
Например, для вывода списка запущенных в системе процессов, упорядоченного по затраченному процессорному времени (свойство CPU), можно
47
воспользоваться следующим конвейером:
Get-Process | Sort-Object CPU.
Для сортировки в обратном порядке используется параметр Descending:
Get-Process | Sort-Object CPU -Descending.
В рассмотренных примерах конвейеры состояли из двух командлетов.
Это не обязательное условие, конвейер может объединять и большее количество команд, например:
Get-Process | Where-Object {$_.Id -GT 1000} | Sort-Object CPU -Descending.
2.1.9.5. Использование переменных
В переменных хранятся все возможные значения, даже если они являются объектами. Имена переменных в PowerShell всегда должны начинаться
с символа «$». Можно сохранить список процессов в переменной, это позволит в любое время получать доступ к списку процессов. Присвоить значение переменной легко:
$a = Get-Process | Sort-Object CPU.
Вывести содержимое переменной можно, просто набрав в командной
строке $a.
2.1.9.6. Создание и инициализация массивов
Для создания и инициализации массива достаточно присвоить значения
его элементам. Значения, добавляемые в массив, разделяются запятыми и
отделяются от имени массива символом присваивания. Например, следующая команда создаст массив $a из трех элементов:
$a = 1,5,7.
Можно создать и инициализировать массив, используя оператор диапазона (..). Например, команда
$b = 10..15
создает и инициализирует массив $b, содержащий 6 значений 10, 11, 12,
13, 14 и 15.
Для создания массива может использоваться операция ввода значений
его элементов из текстового файла:
$f = Get-Content C:\DATA\numb.txt -TotalCount 25
$f.Length
25.
В приведенном примере результат выполнения командлета Get-Content
присваивается массиву $f. Необязательный параметр -TotalCount ограничивает количество прочитанных элементов величиной 25. Свойство объекта
массив Length имеет значение, равное количеству элементов массива, в при48
мере оно равно 25 (предполагается, что в текстовом файле munb.txt по крайней мере 25 строк).
2.1.9.7. Обращение к элементам массива
Длина массива (количество элементов) хранится в свойcтве Length. Для
обращения к определенному элементу массива нужно указать его индекс в
квадратных скобках после имени переменной. Нумерация элементов массива всегда начинается с нуля. В качестве индекса можно указывать и отрицательные значения, отсчет будет вестись с конца массива, индекс -1 соответствует последнему элементу массива.
2.1.9.8. Операции с массивами
По умолчанию массивы PowerShell могут содержать элементы разных
типов (целые 32-х разрядные числа, строки, вещественные и другие), то есть
являются полиморфными. Можно создать массив с жестко заданным типом,
содержащий элементы только одного типа, указав нужный тип в квадратных
скобках перед именем переменной. Например, следующая команда создаст
массив 32-х разрядных целых чисел:
[int[]]$a = 1,2,3.
Массивы PowerShell базируются на .NET-массивах, имеющих фиксированную длину, поэтому обращение за пределы массива фиксируется как
ошибка. Имеется способ увеличения первоначально определенной длины
массива. Для этого можно воспользоваться оператором конкатенации +
или +=. Например, следующая команда добавит к массиву $a два новых элемента со значениями 4 и 5:
$a += 4,5.
При выполнении оператора += происходит следующее:
– создается новый массив, размер которого достаточен для помещения в
него всех элементов;
– первоначальное содержимое массива копируется в новый массив;
– новые элементы копируются в конец нового массива.
Таким образом, на самом деле создается новый массив большего размера.
Можно объединить два массива, например $b и $c в один с помощью
операции конкатенации +. Например:
$d = $b + $c.
49
2.1.10. Регулярные выражения – назначение и использование
Регулярные выражения (или сокращенно «регэкспы» (regexp, regular expressions)) обладают огромной мощью, и способны сильно упростить жизнь
системного администратора или программиста. В PowerShell регулярные
выражения легко доступны, удобны в использовании и максимально функциональны. PowerShell использует реализацию регулярных выражений
.NET.
Регулярные выражения – это специальный мини-язык, служащий для
разбора (parsing) текстовых данных. С его помощью можно разделять строки
на компоненты, выбирать нужные части строк для дальнейшей обработки,
производить замены и т. д.
Знакомство с регулярными выражениями начнем с более простой технологии, служащей подобным целям – с подстановочных символов. Наверняка
вы не раз выполняли команду DIR, указывая ей в качестве аргумента маску
файла, например *.exe. В данном случае звёздочка означает «любое количество любых символов». Аналогично можно использовать и знак вопроса, он
будет означать «один любой символ», то есть DIR??.exe выведет все файлы с
расширением .exe и именем из двух символов. В PowerShell можно применять и еще одну конструкцию – группы символов. Так, например, [a-f] будет
означать «один любой символ от a до f, то есть символ из списка
(a,b,c,d,e,f)», а [smw] любую из трех букв из списка (s, m или w). Таким образом, команда Get-Childitem [smw]??.exe выведет файлы с расширением .exe,
у которых имя состоит из трех букв, и первая буква либо s, либо m, либо w.
2.1.10.1. Оператор PowerShell -MATCH
Для начала изучения мы будем использовать оператор PowerShell MATCH, который позволяет сравнивать текст слева от него с регулярным
выражением справа. В случае если текст соответствует регулярному выражению, оператор выдает True, иначе – False. Например,
"PowerShell" -MATCH "Power" выдает True.
При сравнении с регулярным выражением ищется лишь вхождение
строки, полное совпадение текста необязательно (разумеется, это можно изменить). То есть достаточно, чтобы регулярное выражение встречалось в
тексте. Например,
"Shell" -MATCH "Power" выдает False, а
"PowerShell" -MATCH "rsh" выдает True.
Еще одна тонкость: оператор -MATCH по умолчанию не чувствителен к
регистру символов (как и другие текстовые операторы в PowerShell), если же
50
нужна чувствительность к регистру, используется оператор –CMATCH.
Например,
"PowerShell" -СMATCH "rsh" выдает False.
2.1.10.2. Использование групп символов
В регулярных выражениях можно использовать группы символов. Результат выполнения команды
Get-Process | Where-Object {$_.ProcessName -MATCH "sy[ns]"}
показан на рисунке 2.5.
Рисунок 2.5 – Использование группы символов
Группы символов можно задавать через диапазон, например команда
"яблоко","апельсин","груша","абрикос" -MATCH "а[а-п]" выведет строки «апельсин» и «абрикос».
В левой части оператора -MATCH находится массив строк, и оператор
соответственно выдаст лишь те строки, которые подошли под регулярное
выражение.
Перечисления символов можно комбинировать, например группа [агдэя] будет означать «А или Г или Д или любой символ от Э до Я включительно». Но гораздо интереснее использовать диапазоны для определения целых
классов символов. Например [а-я] будет означать любую букву русского алфавита, а [a-z] английского. Аналогично можно поступать с цифрами – следующая команда выведет все процессы, в именах которых встречаются цифры:
Get-Process | Where-Object {$_.ProcessName -MATCH "[0-9]"}.
Так как эта группа используется достаточно часто, для неё была выделена специальная последовательность \d (от слова digit). По смыслу она полностью идентична [0-9], но короче. Предыдущую команду можно записать в
эквивалентном виде:
Get-Process | Where-Object {$_. ProcessName -MATCH "\d"}.
51
Так же последовательность была выделена для группы «любые буквы
любого алфавита, любые цифры, или символ подчеркивания» эта группа
обозначается как \w (от word), она примерно эквивалентна конструкции [azа-я_0-9] (в \w еще входят символы других алфавитов которые используются
для написания слов).
Другая популярная группа \s «пробел, или другой пробельный символ»
(например символ табуляции). Сокращение от слова space. В большинстве
случаев вы можете обозначать пробел просто как пробел, но эта конструкция добавляет читабельности регулярному выражению.
Не менее популярной группой можно назвать символ . (точка). Точка в
регулярных выражениях аналогична по смыслу знаку вопроса в подстановочных символах, то есть обозначает один любой символ.
Все перечисленные конструкции можно использовать как отдельно, так
и в составе групп, например [\s\d] будет соответствовать любой цифре или
пробелу. Если вы хотите указать внутри группы символ - (тире/минус) то
надо либо экранировать его символом \ (обратный слеш), либо поставить его
в начале группы, чтобы он не был случайно истолкован как диапазон,
например команда
"?????","Word","123","-" -MATCH "[-\d]" выведет строки «123» и «-».
2.1.10.3. Отрицательные группы и якоря
Рассмотрим некоторые более сложные конструкции регулярных выражений.
Предполагается, что вы уже знаете, как указать регулярному выражению, какие символы и/или их последовательности должны быть в строке для
совпадения. А что если нужно указать не те символы, которые должны присутствовать, а те которых не должно быть? То есть, если нужно вывести
лишь согласные буквы, вы можете их перечислить, а можете использовать и
отрицательную группу с гласными, например:
"a","b","c","d","e","f","g","h" -MATCH "[^aoueyi]".
«Крышка» в качестве первого символа группы символов означает именно отрицание. То есть на месте группы может присутствовать любой символ
кроме перечисленных в ней. Для того чтобы включить отрицание в символьных группах (\d, \w, \s), не обязательно заключать их в квадратные скобки, достаточно перевести их в верхний регистр. Например, \D будет означать
«что угодно, кроме цифр», а \S «все, кроме пробелов». Команда
"a","b","1","c","45" -MATCH "\D" выведет строки «a», «b» и «c», а команда
"a","-","*","c","&" -MATCH "\W" выведет строки «-», «*» и «&».
Символьные группы позволяют указать лишь содержимое одной пози52
ции, один символ, находящийся в неопределенном месте строки. А что, если
надо, например, выбрать все слова, которые начинаются с буквы w? Если
просто поместить эту букву в регулярное выражение, то ему будут удовлетворять всех строки, где w вообще встречается, и не важно – в начале, в середине или в конце строки. В таких случаях на помощь приходят «якоря».
Они позволяют производить сравнение, начиная с определенной позиции в
строке.
Якорь ^ (крышка) обозначает начало строки, а якорь $ (знак доллара)
обозначает конец строки.
Не запутайтесь, символ ^ как символ отрицания используется лишь в
начале группы символов, а вне группы этот символ является уже якорем.
Авторам регулярных выражений явно не хватало специальных символов, и
они по возможности использовали их более чем в одном месте.
Пример. Вывод списка процессов, имена которых начинаются с буквы
w, показан на рисунке 2.6.
Рисунок 2.6 – Пример использования якоря ^ (крышка)
Пример использования якоря якорь $ (знак доллара). Команда
"яблоки","груши","дыня","енот","апельсины","персик" -MATCH "[ыи]$"
выведет строки «яблоки», «груши», «апельсины», последним символом в
которых является ы или и.
2.1.10.4. Количественные модификаторы (квантификаторы)
Обычно регулярные выражения гораздо сложнее, чем приведенные выше, и записывать их по одному символу достаточно сложно. Например,
нужно отобрать строки, состоящие из четырех символов, каждый из которых
может быть буквой от a до f или цифрой. Регулярное выражение может выглядеть примерно так:
"af12","1FE0","1fz1","B009","C1212" -MATCH "^[a-f\d][a-f\d][a-f\d][a-f\d]$"
53
Это регулярное выражение выведет строки «af12», «1FE0» и «B009».
Регулярное выражение выглядит громоздким. Эту конструкцию можно
значительно сократить. Для этого в регулярных выражениях существует
специальная конструкция – количественные модификаторы (квантификаторы). Эти модификаторы приписываются к любой группе справа, и определяют количество вхождений этой группы. Например, количественный модификатор {4} означает 4 вхождения. Приведенный выше пример можно
записать в виде:
"af12","1FE0","1fz1","B009","C1212" -MATCH "^[a-f\d]{4}$".
Данное регулярное выражение полностью эквивалентно предыдущему –
«4 раза по [a-f\d]». Но этот количественный модификатор не обязательно
жестко оговаривает количество повторений. Например, можно задать количество как «от 4 до 6». Делается это указанием внутри фигурных скобок
двух чисел через запятую – минимума и максимума.
Если максимальное количество вхождений безразлично, например,
нужно указать «3 вхождения или больше», то максимум можно просто опустить (оставив запятую на месте), например «строка состоящая из трех или
более цифр»: "^\d{3,}$". Минимальное значение опустить нельзя, но можно
просто указать единицу.
Как и в случае с символьными группами, для особенно популярных значений количественных модификаторов есть короткие псевдонимы:
+ (плюс), эквивалентен {1,} то есть, «одно или больше вхождений»;
* (звездочка), то же самое что и {0,} или на русском языке – «любое количество вхождений, в том числе и 0»;
? (вопросительный знак), равен {0,1} – «либо одно вхождение, либо
полное отсутствие вхождений».
В регулярных выражениях количественные модификаторы сами по себе
использоваться не могут. Для них обязателен символ или символьная группа, которые и будут определять их смысл. Вот несколько примеров:
.+ это «один или более любых символов», аналог ?* в простых подстановках (как в cmd);
Get-Process | Where-Object {$_.ProcessName -MATCH "^s.+s$"} выбирает процессы, у которых имя «начинается с буквы s, затем следует 1 или более любых символов, затем снова буква s и сразу после неё конец строки»,
иначе говоря «имена, которые начинаются и заканчиваются на s»;
\S* это любое количество символов, не являющихся пробелами, в том
числе пустая строка;
бобры? это не вопрос, а регулярное выражение, последовательность
«бобр», после которой может идти символ ы, а может и отсутствовать.
54
2.1.10.5. Группы захвата и переменная $Matches
Теперь, когда мы можем с помощью регулярных выражений описывать
и проверять строки по достаточно сложным правилам, пора познакомиться с
другой не менее важной возможностью регулярных выражений – группами
захвата (capture groups). Как следует из названия, группы можно использовать для группировки. К группам захвата, как и к символам и символьным
группам, можно применять количественные модификаторы. Например, следующее выражение "^s(-\d+)+$" означает «первая буква в строке s, затем одна или больше групп, состоящих из «знака - (минус) и любого количества
цифр за ним» до конца строки». Команда
"s-1-5-21-1964843605-2840444903-4043112481" -MATCH "^S(-\d+)+$"
выведет True, а команда
"ноут","ноутбук","лаптоп" -MATCH "ноут(бук)?"
выведет строки «ноут» и «ноутбук».
Эти примеры показывают, как можно использовать группы захвата для
группировки, но это вовсе не главное качество групп захвата. Гораздо важнее то, что часть строки, попавшая под подвыражение, находящееся внутри
такой группы, помещается в специальную переменную $Matches. $Matches –
это массив, и в нем может находиться содержимое нескольких групп. Причем под индексом 0 туда помещается вся совпавшая строка, начиная с единицы идет содержимое групп захвата. Рассмотрим пример. Команда
"At 17:04 Firewall service was stopped." -MATCH "(\d\d:\d\d) (\S+)"
выведет True, а результат чтения переменной $Matches показан на рисунке 2.7.
Рисунок 2.7– Результат чтения переменной $Matches
Под индексом 0 находится вся часть строки, попавшая под регулярное
выражение, под индексом 1 находится содержимое первых скобок, и под
55
индексом 2 – содержимое вторых скобок. К содержимому $Matches можно
обращаться как к элементам любого другого массива в PowerShell.
Если в строке присутствует несколько групп захвата, то бывает полезно
дать им имена, это сильно облегчает дальнейшую работу с полученными
данными. Команда
"At 17:04 Firewall service was stopped." -MATCH "(?<Время>\d\d:\d\d)
(?<Служба>\S+)" выведет True, а результаты чтения переменной $Matches
показаны на рисунке 2.8.
Рисунок 2.8– Результаты чтения переменной $Matches с именами строк
Регулярное выражение усложнилось, но зато работать с результатами
гораздо удобнее. Синтаксис именования следующий:
(?<Название Группы>подвыражение).
Не перепутайте порядок, сначала следует знак вопроса. Количественные
модификаторы, в том числе ? могут применяться только после группы, и
следовательно в начале подвыражения бессмысленны. Поэтому в группах
знак вопроса, следующий сразу за открывающей скобкой, означает особый
тип группы, в нашем примере – именованную.
Другой тип группы, который часто используется, незахватывающая
группа. Она может пригодиться в тех случаях, когда не нужно захватывать
содержимое группы, а надо применить её только для группировки. Например, в приведенном выше примере с первой буквой s в строке, такая группа
была бы более уместна. Команда
"S-1-5-21-1964843605-2840444903-4043112481" -MATCH "^S(?:-\d+)+$"
также выведет True.
Синтаксис такой группы: (?:подвыражение). Группы можно и вкладывать одну в другую, например команда
"MAC address is '00-19-D2-73-77-6F'." -MATCH "is '([a-f\d]{2}(?:-[af\d]{2}){5})'" выведет True.
56
2.1.11. Управляющие инструкции
2.1.11.1. Инструкция If …ElseIf … Else
В общем случае синтаксис инструкции If имеет вид
If (условие1)
{блок_кода1}
[ElseIf (условие2)]
{блок_кода2}]
[Else
{блок_кода3}].
При выполнении инструкции If проверяется истинность условного выражения условие1.
Если условие1 имеет значение $True, то выполняется блок_кода1, после
чего выполнение инструкции If завершается. Если условие1 имеет значение
$False, проверяется истинность условного выражения условие2. Если условие2 имеет значение $True, то выполняется блок_кода2 и выполнение инструкции If завершается. Если и условие1, и условие2 имеют значение $False,
то выполняется блок_кода3 и выполнение инструкции If завершается.
Пример использования инструкции If в интерактивном режиме работы.
Сначала переменной $a присвоим значение 10: $a=10. Затем сравним значение переменной с числом 15:
If ($a –EQ 15) { ‘Значение $a равно 15’} Else {‘Значение $a не равно
15‘}.
Будет выведена строка «Значение $a не равно 15».
2.1.11.2. Циклы While и Do … While
Самый простой из циклов PowerShell – цикл While, в котором команды
выполняются до тех пор, пока проверяемое условие имеет значение $True.
Инструкция While имеет следующий синтаксис:
While (условие) {блок_команд}.
Цикл Do … While похож на цикл While, однако условие в нем проверяется не до блока команд, а после: Do {блок_команд} While (условие).
Например, в результате выполнения команд $val = 0 и
Do {$val++; $val} While ($val –NE 3)
будет выведена последовательность строк «1», «2», «3».
2.1.11.3. Цикл For
Обычно цикл For применяется для прохождения по массиву и выполне57
ния определенных действий с каждым из его элементов. Синтаксис инструкции For:
For (инициация; условие; повторение) {блок_команд}.
Например, команда For ($i = 0; $i –LT 3; $i++) {$i } выведет последовательность строк «0», «1», «2».
2.1.11.4. Цикл ForEach
Инструкция ForEach позволяет последовательно перебирать элементы
коллекций. Самый простой тип коллекции – массив. Особенность
цикла ForEach состоит в том, что его синтаксис и выполнение зависят от того, где расположена инструкция ForEach: вне конвейера команд или внутри
конвейера.
Если инструкция ForEach расположена вне конвейера команд, то синтаксис цикла ForEach имеет вид:
ForEach ($элемент in $коллекция) {блок_команд}.
При выполнении цикла ForEach автоматически создается переменная
$элемент. Перед каждой итерацией в цикле этой переменной присваивается
значение очередного элемента в коллекции. В разделе блок_команд содержатся команды, выполняемые для каждого элемента коллекции. Приведенный ниже цикл ForEach отображает значения элементов массива $lettArr:
$lettArr = “a”, “b”,”c”
ForEach ($lett in $lettArr) {Write-Host $lett}.
Инструкция ForEach может также использоваться совместно с командлетами, возвращающими коллекции элементов. Например:
$ln = 0; ForEach ($f in Get-Childitem *.txt) {$ln +=$f.Length}.
В примере создается и обнуляется переменная $ln, затем в
цикле ForEach с помощью командлета Get-Childitem формируется коллекция
файлов с расширением txt, находящихся в текущем каталоге. Инструкция
ForEach перебирает все элементы этой коллекции, на каждом шаге к текущему файлу выполняется обращение с помощью переменной $f. В блоке команд цикла ForEach к текущему значению переменной $ln добавляется значение свойства Length (размер файла) переменной $f. В результате выполнения цикла в переменной $ln будет получен суммарный размер файлов в текущем каталоге, которые имеют расширение txt.
Если инструкция ForEach появляется внутри конвейера команд,
то PowerShell использует псевдоним ForEach, соответствующий командлету
ForEach-Object. В этом случае фактически выполняется командлет ForEachObject и не требуется часть инструкции ($элемент in $коллекция), так как
элементы коллекции блоку команд предоставляет предыдущая команда конвейера.
58
Синтаксис инструкции ForEach внутри конвейера команд имеет вид:
команда | ForEach {блок_команд}.
Рассмотренный выше пример подсчета суммарного размера файлов из
текущего каталога для данного варианта инструкции ForEach примет следующий вид:
PS C:\> $ln = 0; Get-Childitem *.txt | ForEach {$ln +=$_.Length}.
В приведенном примере специальная переменная $_ используется для
обращения к текущему объекту конвейера и извлечения его свойств.
2.1.12. Управление выводом команд в PowerShell
Рассмотрим, каким образом система формирует строки текста, которые
выводятся на экран в результате выполнения той или иной команды (напомним, что командлеты PowerShell возвращают .NET-объекты, которые, как
правило, не знают, каким образом отображать себя на экране).
В PowerShell имеется набор XML-файлов, содержащbq модули форматирования по умолчанию для различных типов .NET-объектов. Эти модули
определяют, какие свойства объекта отображаются при выводе и в каком
формате: списка или таблицы. Когда объект достигает конца конвейера,
PowerShell определяет его тип и ищет его в списке объектов, для которых
определено правило форматирования. Если данный тип в списке обнаружен,
то к объекту применяется соответствующий модуль форматирования; если
нет, то PowerShell просто отображает свойства этого .NET-объекта.
Также в PowerShell можно явно задавать правила форматирования данных, выводимых командлетами, и подобно командному интерпретатору
cmd, перенаправлять эти данные в файл, на принтер или в пустое устройство.
2.1.12.1. Форматирование выводимой информации
В традиционных оболочках команды и утилиты сами форматируют выводимые данные. Некоторые команды (например, DIR в интерпретаторе
cmd) позволяют настраивать формат вывода с помощью специальных параметров.
В оболочке PowerShell вывод форматируют только четыре специальных
командлета Format, описанные в таблице 2.3. Это упрощает изучение, так
как не нужно запоминать средства и параметры форматирования для других
команд (остальные командлеты вывод не форматируют).
Как уже отмечалось, если ни один из командлетов Format явно не указан, то используется модуль форматирования по умолчанию, который определяется по типу отображаемых данных. Например, при выполнении ко59
мандлета Get-Service данные по умолчанию выводятся как таблица с тремя
столбцами (Status, Name и DisplayName).
Таблица 2.3 – Командлеты PowerShell для форматирования вывода
Командлет
Описание
Format-Table
Форматирует вывод команды в виде таблицы, столбцы
которой содержат свойства объекта (также могут быть
добавлены вычисляемые столбцы). Поддерживается
возможность группировки выводимых данных
Format-List
Вывод форматируется как список свойств, в котором
каждое свойство отображается на новой строке. Поддерживается возможность группировки выводимых
данных
Format-Custom Для форматирования вывода используется пользовательское представление (view)
Format-Wide
Форматирует объекты в виде широкой таблицы, в которой отображается только одно свойство каждого объекта
Для изменения формата выводимых данных нужно направить их по
конвейеру соответствующему командлету Format. Например, следующая
команда выведет список служб с помощью командлета Format-List:
Get-Service | Format-List.
При использовании формата списка выводится больше сведений о каждой службе, чем в формате таблицы (вместо трех столбцов данных о каждой
службе в формате списка выводятся девять строк данных). Однако это вовсе
не означает, что командлет Format-List извлекает дополнительные сведения
о службах. Эти данные содержатся в объектах, возвращаемых командлетом
Get-Service, однако командлет Format-Table, используемый по умолчанию,
отбрасывает их, потому что не может вывести на экран более трех столбцов.
При форматировании вывода с помощью командлетов Format-List и
Format-Table можно указывать имена свойства объекта, которые должны
быть отображены (напомним, что просмотреть список свойств, имеющихся
у объекта, позволяет рассмотренный ранее командлет Get-Member). Например:
Get-Service | Format-List Name, Status, CanStop.
Вывести все имеющиеся у объектов свойства можно с помощью параметра *, например:
Get-Service | Format-table *.
60
2.1.12.2. Перенаправление выводимой информации
В оболочке PowerShell имеются несколько командлетов, с помощью которых можно управлять выводом данных. Эти командлеты начинаются со
слова Out, их список можно получить с помощью команлета:
Get-Command Out-* | Format-Table Name.
В результате получим список командлетов Out-Default, Out-File, OutHost, Out-Null, Out-Printer, Out-String.
По умолчанию выводимая информация передается командлету OutDefault, который, в свою очередь, делегирует всю работу по выводу строк на
экран командлету Out-Host. Для понимания данного механизма нужно учитывать, что архитектура PowerShell подразумевает различие между собственно ядром оболочки (интерпретатором команд) и главным приложением
(host), которое использует это ядро. В принципе, в качестве главного может
выступать любое приложение, в котором реализован ряд специальных интерфейсов, позволяющих корректно интерпретировать получаемую от
PowerShell информацию. В нашем случае главным приложением является
консольное окно, в котором мы работаем с оболочкой, и командлет Out-Host
передает выводимую информацию в это консольное окно.
Параметр Paging командлета Out-Host, подобно команде MORE интерпретатора cmd, позволяет организовать постраничный вывод информации,
например:
Get-Help Get-Process –Full | Out-Host –Paging.
2.1.12.3. Сохранение данных в файл
Командлет Out-File позволяет направить выводимые данные вместо окна консоли в текстовый файл. Аналогичную задачу решает оператор перенаправления (>), однако командлет Out-File имеет несколько дополнительных
параметров, с помощью которых можно более гибко управлять выводом:
задавать тип кодировки файла (параметр Encoding), задавать длину выводимых строк в знаках (параметр Width), выбирать режим перезаписи файла
(параметр Append). Например, следующая команда направит информацию о
выполняющихся на компьютере процессах в файл C:\Process.txt, причем
данный файл будет записан в формате ASCII:
Get-Process | Out-File -FilePath C:\Process.txt -Encoding ASCII.
2.1.12.4. Подавление вывода
Командлет Out-Null служит для поглощения любых своих входных данных. Это может пригодиться для подавления вывода на экран ненужных
61
сведений, полученных в качестве побочного эффекта выполнения какойлибо команды. Например, при создании каталога командой MKDIR на экран
выводится его содержимое. Если эта информация не нужна, то результат
выполнения команды MKDIR необходимо передать по конвейеру командлету Out-Null:
MKDIR NewDir | Out-Null.
2.1.12.5. Преобразование данных в формат html, сохранение в файле
и просмотр результатов
Для преобразования данных в формат html служит командлет
ConvertTo-Html. Параметр Property определяет свойства объектов, включаемые в выходной документ. Например, для получения списка выполняемых
процессов в формате html, включающего имя процесса и затраченное время
CPU и записи результата в файл Processes.htm можно использовать команду
Get-Process | ConvertTo-Html -Property Name, CPU > Processes.htm
Для просмотра содержимого сохраненного файла можно использовать
командлет Invoke-Item "Processes.htm".
2.1.12.6. Инвентаризация и диагностика Windows-компьютеров
Для вывода сведений о процессоре компьютера служит командлет GetWmiObject
Get-WmiObject -Class Win32_Processor | Format-list *.
2.1.12.7. Командлеты для измерения свойств объектов
Для иэмерения времени выполнения командлетов PowerShell служит
командлет Measure-Command. В качестве примера рассмотрим получение
времени выполнение командлета Get-Childitem:
(Measure-Command {Get-Childitem}).TotalSeconds.
Для получения статистических данных служит командлет MeasureObject. Для числовых массивов с его помощью можно получить максимальное, минимальное, среднее значение элементов массива и их сумму. Если
имеется инициализированный массив ms, для указанной цели используется
командлет
$ms | Measure-Object –maximum –minimum –average –sum.
62
2.2. МЕТОДИКА ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
1. Ознакомиться с теоретическими сведениями.
2. Запустить оболочку PowerShell.
3. Увеличить ширину окна оболочки до максимальной, увеличить
высоту окна и задать цвет фона и цвет шрифта (рекомендуется синий
фон и белый шрифт). Объявить текущим каталогом каталог C:\Мои документы (или другой каталог по указанию преподавателя).
4. Изучить расширенную справку по командлету Get-Childitem. Вывести
содержимое каталога Windows (для студентов 5 и 10 – и подкаталогов) по
указанному в таблице 2.4 формату на экран и в текстовый файл.
Таблица 2.4 – Варианты задания 4 для студентов
Номера
Имя каталога
Что
Сортиростуденвыводить
вать по
тов
1, 6
C:\Windows
Только файлы
Размеру
2, 7
C:\Windows
3, 8
C:\Windows
4, 9
C:\Windows
5, 0
C:\Windows и
все подкаталоги
Файлы и
подкаталоги
Только
подкаталоги
Только файлы
exe
Только файлы
jpg
Условие отбора
Размеру
Размер >
10000
Первые буквы
имени SY
Последняя
буква имени S
или T
Размер >50000
Именам
Любые
Дате
Именам
Номер выполняемого задания определяется последней цифрой порядкового номера студента в подгруппе, выполняющей лабораторную работу.
5. Вывести в текстовый файл список свойств процесса, возвращаемый
командлетом Get-Process и на экран – их общее количество.
6. Создать текстовый файл, содержащий список выполняемых процессов, упорядоченный по возрастанию указанного в таблице 2.5 параметра.
Имена параметров процессов указаны в таблице 2.5.
7. Cоздать HTML-файл, содержащий список выполняемых процессов,
упорядоченный по возрастанию указанного в таблице 2.5 параметра. Имена
параметров процессов указаны в таблице 2.5.
63
Таблица 2.5 – Варианты заданий 6 и 7 для студентов
Номера
Список выводимых параСортировать по
студенметров процессов
значению патов
раметра
1, 4
2, 6
3, 5
7, 8
9, 0
Имя процесса, BasePriority,
Company
Id, Имя процесса, время
старта, Handles
Имя процесса, Id , PriorityClass, UserprocessorTime,
TotalProcessorTime
Имя процесса, PriorityClass,
ProductVersion, Id
Id, Имя процесса,
WorkingSet, CPU
Имя процесса
Время старта
Вывести процессы, у которых
BasePriority >
7
Id > 40
TotalProcessorTime
Id > 100
Имя процесса
Id > 100
Id
CPU > 5
8. Найти суммарный объем всех графических файлов (bmp, jpg), находящихся в каталоге Windows и всех его подкаталогах.
9. Вывести на экран сведения о процессоре компьютера.
10. Найти максимальное, минимальное и среднее значение времени выполнение командлетов Get-Childitem и Get-Process.
11. Выполнить индивидуальные задания для студентов согласно таблице 2.6.
Таблица 2.6 – Варианты задания 11 для студентов
№
Содержание задания – разработать последовательность команд
студ.
(командлетов) для:
1
1. вычисления факториала от целочисленной переменной с именем numb
2. нахождения минимального и максимального значений чисел,
хранящихся в файле nn.txt (числа записаны построчно)
2
1. нахождения количества различных чисел, хранящихся в файле
nn.txt (числа записаны построчно)
2. нахождения количества наибольших чисел, хранящихся в файле
nn.txt
3
1. нахождения количества положительных чисел, хранящихся в
файле nn.txt
2. нахождения количества четных чисел, хранящихся в файле
nn.txt
64
4
5
6
7
8
9
0
1. нахождения в заданном каталоге файла наибольшего размера
2. нахождения в заданном каталоге трех файлов наименьшего
размера
1. нахождения среди выполняющихся процессов имен процессов,
выполняющихся в двух или более экземплярах
2. нахождения среди выполняющихся процессов имени процесса,
запущенного последним
1. нахождения среди выполняющихся процессов имен трех процессов, использовавших более всего процессорного времени
2. нахождения среди выполняющихся процессов имени процесса с
наибольшим размером рабочего множества страниц
1. нахождения среди выполняющихся процессов имен процессов с
наименьшим значением BasePriority
2. нахождения среди выполняющихся процессов имен процессов,
у которых значения параметра WorkingSet одинаковы
1. проверки наличия в текущем каталоге файлов одинакового размера. Если такие файлы есть – вывести их имена
2. нахождения среди выполняющихся процессов имен процессов с
наибольшим значением приоритета
1.нахождения в каталоге windows\system32 имен трех dll
наибольшего и наименьшего размеров
2. нахождения в каталоге windows\system32 имен трех dll с самой
ранней датой создания
1. нахождения среди выполняющихся процессов имен трех процессов, работающих в системе дольше всего
2. нахождения среди выполняющихся процессов имен процессов,
имеющих одинаковые ProductVersion
Отчеты по лабораторной работе – индивидуальные, должны содержать
тексты командлетов, использованных при выполнении заданий 4 - 11
и результаты, полученные при выполнении заданий 5, 6, 8, 9, 10, 11 .
При защите отчета по лабораторной работе студент должен ответить на контрольные вопросы по выбору преподавателя.
2.3. КОНТРОЛЬНЫЕ ВОПРОСЫ
1.
2.
3.
4.
Типы команд PowerShell.
Имена и структура командлетов.
Псевдонимы команд.
Просмотр структуры объектов.
65
5. Фильтрация объектов в конвейере. Блок сценария.
6. Какую информацию выводит команда Get-Help * ?
7. Командлеты для форматирования выводимой информации.
8. Перенаправление выводимой информации.
9. Управляющие инструкции PowerShell.
10. Назначение регулярных выражений.
11. Сохранение данных в текстовом файле и html-файле.
12. Получение справочной информации в PS.
13. Как создать массив в PowerShell?
14. Как объединить два массива?
15. Как увеличить размер созданного в PowerShell массива?
16. Как ввести данные в массив?
17. Использование командлета Out-Null.
18. Оператор PowerShell –MATCH.
19. Использование символа ^ в командлетах.
20. Использование символа $ в командлетах.
21. Количественные модификаторы (квантификаторы).
22. Использование групп захвата.
23. Командлеты для измерения свойств объектов.
ЛАБОРАТОРНАЯ РАБОТА № 3
РАЗРАБОТКА ДИАГРАММЫ «СУЩНОСТЬ – СВЯЗЬ»
И СТРУКТУРЫ ТАБЛИЦ БАЗЫ ДАННЫХ
Цель работы: освоение технологии построения информационной модели инфологического и логического уровней в нотации IDEF1X с использованием пакета Microsoft Office Visio 2007.
3.1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
3.1.1. Понятие информационной модели. Уровни информационной
модели
Проектирование информационных систем – это сложнейшая задача,
предполагающая использование различных методик и инструментов. Одной
из важнейших проблем, стоящих перед проектировщиком, является определение структуры базы данных, соответствующей функциям автоматизируемого предприятия или подразделения.
Для анализа структуры данных и информационного моделирования существуют различные программные продукты. Один из них – Microsoft Office
66
Visio 2007, поддерживающий методологию IDEF1X (Integration DEFinition
for Information Modeling). Он позволяет построить информационнологическую (инфологическую) модель предметной области системы, представляющую собой совокупность информационных объектов и связей между
ними, а также логическую структуру базы данных для реляционных систем
управления базами данных (СУБД).
Методология IDEF1X – язык для семантического моделирования предметной области, основанный на концепции «сущность-связь».
Различают три уровня информационной модели: инфологический, логический (концептуальный) и физический (внутренний).
Инфологическая модель предметной области описывает, какие данные
должны храниться и обрабатываться в проектируемой базе данных (БД), не
касаясь вопроса, как это должно быть реализовано.
Логическая модель предметной области определяет представление БД,
единое и доступное для всех пользователей и прикладных программ. Логическая схема БД записывается администратором БД на языке описания данных (ЯОД) конкретной СУБД. Пользователи и прикладные программы взаимодействуют с БД в терминах логической структуры БД на языке манипулирования данными (ЯМД) конкретной СУБД.
Физическая модель предметной области определяет представление
данных в среде хранения и пути доступа к ним. Физическая схема БД записывается администратором БД на ЯОД конкретной СУБД.
Различают 3 подуровня инфологического уровня, отличающиеся по глубине представления информации о данных:
- диаграмма сущность-связь (Entity-Relationship Diagram (ERD);
- модель, основанная на ключах (Key Based Model (KB);
- полная атрибутивная модель (Fully Attributed Model (FA).
3.1.2. Основные элементы информационной модели инфологического уровня
3.1.2.1. Сущности и атрибуты
Сущность – это множество реальных или абстрактных объектов (людей,
предметов, документов и т.п.), обладающих общими атрибутами или характеристиками. Любой объект системы может быть представлен только одной
сущностью, которая должна быть уникально идентифицирована. Именование сущности осуществляется с помощью существительного в единственном
числе. При этом имя сущности должно отражать тип или класс объекта, а не
его конкретный экземпляр (например, Студент, а не Петров).
67
Любая сущность характеризуется набором атрибутов (свойств).
Атрибут сущности – характеристика сущности, то есть свойство реального объекта. Например, атрибутами сущности «Студент» являются «Фамилия», «Имя», «Отчество», «Дата поступления», «Номер студенческого
билета».
В инфологической модели предметной области значением атрибута может быть неделимый элемент данных, вектор из элементов данных, структура из элементов данных, повторяющаяся группа из элементов данных, векторов или структур.
В свою очередь, атрибуты сущности делятся на 2 вида: собственные и
наследуемые. Собственные атрибуты являются уникальными в рамках модели. Наследуемые атрибуты передаются от родительской сущности к подчиненным сущностям при установке связи между сущностями.
Первичный ключ (Primary Key, PK). Каждая сущность должна обладать атрибутом или комбинацией атрибутов, чьи значения однозначно идентифицируют каждый экземпляр сущности. Эти атрибуты образуют первичный ключ сущности. Если сущность имеет несколько подмножеств атрибутов, однозначно идентифицирующих экземпляр сущности, то одно из них
объявляется первичным ключом, а каждое из остальных называется возможным или альтернативным ключом.
Внешний ключ (Foreign Key, FK). Если между двумя сущностями
имеется связь типа «один ко многим», то атрибуты, входящие в первичный
ключ родительской сущности, наследуются в качестве атрибутов подчиненной сущности. Эти атрибуты и называются внешними ключами. Наследуемый атрибут может использоваться в сущности в качестве части или целого
первичного ключа, альтернативного ключа или не ключевого атрибута.
3.1.2.2. Связи между сущностями
Связи служат для указания отношений между двумя сущностями в модели. Одна сущность может быть связана с другой сущностью или сама с
собою. Имеются 3 типа связей: «один к одному» (1:1), «один ко многим»
(1:M) и «многие ко многим» (M:N).
Связь типа «один к одному» означает, что один экземпляр первой
сущности связан с одним экземпляром второй сущности и один экземпляр
второй сущности связан с одним экземпляром первой сущности. Связь
«один к одному» может означать, что на самом деле это одна сущность
предметной области, множество атрибутов которой по каким-то причинам
разбито на два подмножества.
Связь типа «один ко многим» означает, что один экземпляр первой
сущности связан с несколькими экземплярами второй сущности. Это
68
наиболее часто используемый тип связи. Сущность со стороны «один»
называется родительской, а со стороны «многим» - подчиненной или
дочерней. На уровне таблиц в реляционной БД это означает, что одна строка
родительской таблицы связана с одной или несколькими строками
подчиненной таблицы, но любая строка подчиненной таблицы может быть
связана только с одной строкой родительской таблицы.
Связь типа «многие ко многим» означает, что каждый экземпляр первой
сущности может быть связан с одним или несколькими экземплярами
второй сущности, и каждый экземпляр второй сущности может быть связан
с одним или несколькими экземплярами первой сущности.
Различают зависимые и независимые сущности. Это определяется по
связи сущности с другими сущностями и по возможности идентификации
экземпляра сущности. Независимые сущности имеют PK и, следовательно,
экземпляр может быть идентифицирован по его значению, без привлечения
дополнительной информации. Идентифицирующая связь устанавливается
между независимой (родительский конец связи) и зависимой (дочерний
конец связи) сущностями, если PK родительской сущности используется для
идентификации дочерней сущности. На рисунке 3.1 показан пример
изображения сущностей и идентифицирующей связи между независимой
сущностью «Клиент» и зависимой сущностью «Заказ», в которой
идентификация экземпляра заказа осуществляется указанием двух
атрибутов: «номер заказа» и внешнего ключа «номер клиента».
Рисунок 3.1– Пример идентифицирующей связи между сущностями
Не идентифицирующая связь устанавливается между сущностями, если
первичный ключ родительской сущности не используется для идентификации дочерней сущности, т. е. не входит в первичный ключ дочерней сущности и не входит ни в один из возможных ключей. Мощность связи типа
«один ко многим» между сущностями служит для обозначения количества
экземпляров дочерней сущности, которые связаны с одним экземпляром родительской сущности. Мощность связи может принимать значения «0 или
более», «1 или более», «0 или 1», «ровно 1», «диапазон: не менее N не более
M», где N и M – целые числа, N < M.
69
Для связей типов «один к одному» и «один ко многим» между сущностями требуется задать ограничения ссылочной целостности. Эти ограничения указывают, что надо делать с экземплярами дочерней сущности, если в
связанном с ними экземпляре родительской сущности выполнено обновление значений атрибутов первичного ключа, либо связанный с ними экземпляр родительской сущности удален из базы данных. Возможны следующие
варианты действий: «бездействие», «каскадное обновление» или «каскадное
удаление», «присвоить пустое значение атрибутам связи», «присвоить значение по умолчанию атрибутам связи», «блокировать обновление» или
«блокировать удаление».
3.1.3. Нормализация данных
Нормализация данных – это процесс проверки и реорганизации сущностей и атрибутов с целью построения системы отношений (таблиц), удовлетворяющих требованиям к реляционной модели данных. Процесс нормализации сводится к последовательному приведению структур данных к нормальным формам – формализованным требованиям к организации данных.
Первая нормальная форма (1НФ). Сущность инфологической модели
или таблица логической модели находится в первой нормальной форме, если
все ее атрибуты содержат атомарные значения. Среди атрибутов не должно
встречаться структур данных и повторяющихся групп, т.е. нескольких значений для каждого экземпляра.
Вторая нормальная форма (2НФ). Сущность инфологической модели
или таблица логической модели находится во второй нормальной форме,
если она находится в первой нормальной форме, и каждый не ключевой атрибут функционально полно зависит от первичного ключа (не может быть
зависимости от части ключа).
Третья нормальная форма (3НФ). Сущность инфологической модели
или таблица логической модели находится в третьей нормальной форме,
если она находится во второй нормальной форме и никакой не ключевой
атрибут не зависит от другого не ключевого атрибута (не должно быть
зависимости между не ключевыми атрибутами).
3.2. МЕТОДИКА ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
3.2.1. Задание лабораторной работы
Для предметной области «Система радиосвязи» последовательно выполнить следующие действия:
70
1) построить информационную модель инфологического уровня «сущность-связь»;
2) получить начальную логическую структуру БД;
3) провести нормализацию полученной логической структуры БД до
3НФ.
3.2.2. Построение инфологической информационной модели уровня
«сущность-связь»
3.2.2.1. Пул сущностей для выполнения работы
1.
2.
3.
4.
5.
6.
Радиолиния (RL);
Радиосредство (RS);
Передатчик (RT);
Приемник (RR);
Антенна (RA);
Объект связи (RO).
3.2.2.2. Описание предметной области на естественном языке
Радиолиния состоит из двух или более радиосредств.
Радиосредство входит в одну или более радиолиний.
Передатчик входит в одно радиосредство.
Радиосредство имеет ноль или один передатчик.
Приемник входит в одно радиосредство.
Радиосредство имеет ноль или один приемник.
Радиосредство работает через одну антенну.
Антенна подключена к одному или более радиосредств.
Радиосредство расположено в одном объекте связи.
Объект связи имеет одно или более радиосредств.
Антенна расположена в одном объекте связи.
Объект связи имеет одну или более антенн.
3.2.2.3. Порядок создания инфологической модели «сущность-связь»
1. Запустите Microsoft Office Visio 2007.
2. На закладке выбора шаблона выберите категорию Программное обеспечение и базы данных и в ней элемент Схема модели базы данных. Нажмите
кнопку Создать в правой части экрана.
3. Установите необходимые параметры страницы (масштаб, ориентация
страницы).
71
4. Microsoft Office Visio 2007 поддерживает различные нотации моделей
баз данных. Для того чтобы задать нотацию IDEF1X, необходимо выбрать
пункты меню База данных → Параметры → Документ. В открывшемся
окне на вкладке Общие установить переключатель в меню Набор символов
на IDEF1X. Меню Имена, видимые на схеме позволяет указать, какие имена
атрибутов сущности будут отображены на диаграмме (концептуальные, физические или оба варианта одновременно). В данном случае для логического
представления информационной модели необходимо выбрать пункт Концептуальные имена (рисунок 3.2).
Рисунок 3.2 – Настройка параметров модели
В закладке Отношение окна Параметры документа базы данных в
меню Показывать отметить галочкой пункт Мощность, в меню
Отображение вида выбрать пункт Показывать вербальную фразу, снять
галочку в пункте Обратный текст (рисунок 3.3). Данные настройки
позволят отобразить имя и мощность связи в модели.
72
Рисунок 3.3 – Настройка вида отношений информационной модели
Для того, чтобы типы данных атрибутов сущностей и таблиц базы данных соответствовали допустимым типам данных используемой СУБД, откройте окно Драйверы баз данных (пункты меню База данных → Параметры → Драйверы) и выберите драйвер Microsoft SQL Server.
5. Для того чтобы создать сущность, необходимо перетащить элемент
на рабочее поле. Переход в режим редактирования сущности осуществляется двойным щелчком по сущности или по нажатию правой кнопки
мыши и выбора пункта меню Свойства базы данных.
Чтобы задать имя сущности, в окне Свойства базы данных нужно выбрать категорию Определение, снять галочку в пункте Синхронизация имен
при вводе (в противном случае, физическое и логическое имя сущности будут совпадать, что по практическим соображениям не всегда удобно) и задать концептуальное имя сущности. Руководствуясь данным алгоритмом,
создать 6 сущностей, определенных в пункте 3.2.2.1.
6. Далее необходимо установить связи (отношения) между сущностями.
В предметной области «Система радиосвязи» существуют следующие
связи (отношения) между сущностями.
1. RL состоит из многих RS, RS входит в многие RL, т. е. между RL и RS
существует связь «многие ко многим». Поскольку средствами Visio 2007
73
связи «многие ко многим» не отображаются, можно изобразить между этими
сущностями две связи «один ко многим», направленные в разные стороны.
Не идентифицирующая связь от RL к RS помечается вербальной фразой
«состоит», а не идентифицирующая связь от RS к RL – вербальной фразой
«входит».
2. RT входит в многие RS, RS имеет 0 или один RT, т. е. между RT и RS
существует связь «один ко многим», которая является идентифицирующей
и помечается вербальной фразой «входит». Обратная фраза – «имеет».
3. RR входит в многие RS, RS имеет 0 или один RR, т. е. между RR и RS
существует связь «один ко многим», которая является идентифицирующей
и помечается вербальной фразой «входит». Обратная фраза – «имеет».
4. RA подключена к многим RS, RS работает через одну RA, т. е. между
RA и RS существует связь «один ко многим», которая является не идентифицирующей и помечается вербальной фразой «подключена». Обратная
фраза – «работает».
5. RO имеет много RS, RS расположено в одном RO, т. е. между RO и
RS существует связь «один ко многим», которая является не идентифицирующей и помечается вербальной фразой «имеет». Обратная фраза – «расположено».
6. RO имеет много RA, RA расположена в одном RO, т. е. между RO и
RA существует связь «один ко многим», которая является не идентифицирующей и помечается вербальной фразой «имеет». Обратная фраза – «расположена».
Чтобы установить связи между сущностями, необходимо перетащить на
рабочую область элемент
, поднести один конец стрелки к родительской сущности, другой – к дочерней.
Примечание. При правильном связывании каждая сущность будет подсвечена красным цветом.
В MS Office Visio 2007 по умолчанию используется не идентифицирующее отношение. Чтобы изменить тип связи, необходимо двойным щелчком
по связи открыть окно Свойства базы данных и в категории Прочее указать
тип отношения (идентифицирующее, не идентифицирующее). В этой же категории указывается мощность связи (рисунок 3.4).
Примечание. Кроме того, при не идентифицирующем отношении нужно указать, является ли наличие родительской сущности обязательным (т.е.
может ли существовать экземпляр дочерней сущности, если не существует
экземпляра родительской). Если наличие родительского объекта является
необязательным, графически это отобразится в виде не закрашенного ромба
со стороны родительской сущности.
74
Рисунок 3.4 – Настройка вида отношений информационной модели
Следующий шаг – в категории Имя в поле Вербальная фраза нужно указать имя отношения (рисунок 3.5). Также можно указать имя связи в поле
Обратная фраза для спецификации отношения потомок-родитель (в нашем
случае обратная фраза отображаться не будет).
Примечание. Все изменения при закрытии окна свойств сохраняются
автоматически.
Рисунок 3.5 – Определение имени отношения
После определения имен, типов связей и задания мощностей получим
информационную модель, представленную на рисунке 3.6.
3.2.2.4. Разработка инфологической модели, основанной на ключах
Необходимо определить ключевые атрибуты для каждой сущности, обращая внимание на то, что дочерние сущности наследуют ключевые атрибуты от родительских сущностей. Состав атрибутов сущностей приведен в
таблицах 1 – 6. Ключевые атрибуты сущностей отмечены признаком РК в
пятом столбце таблиц.
75
3.6 – Информационная модель уровня «сущность-связь»
Таблица 3.1 – Атрибуты сущности RL
Имя
RL01
RL02
RL03
Признак
элемента
Э
Э
Э
RL04
Э
CHAR(8)
Да
RL05
RL06
Э
Э
VARCHAR(255)
INTEGER
Да
Да
RL07
Э
INTEGER
RL08
ПГ
76
Тип и формат
Признак
обяз.
VARCHAR(255)
INTEGER
CHAR(4)
Да
Да
Да
VARCHAR(255)
Признак
ключа
PK
Наименование атрибута
Наименование РЛ
Ранг (важность) РЛ
Тип РЛ (ФРЧ, ППРЧ или
РРЛ)
Режим работы (симплекс
или дуплекс)
Вид модуляции
Количество рабочих частот на передачу
Количество рабочих частот на прием
Варианты присвоения. ПГ:
наименование варианта
RL09
ПГ
VARCHAR(255)
RL10
ПГ
VARCHAR(255)
(RL0801), дата начала варианта (RL0802), дата
окончания варианта
(RL0803)
Присвоенные частоты на
передачу. ПГ: наименование варианта (RL0801),
номер частоты (RL0902),
частота (RL0903)
Присвоенные частоты на
прием. ПГ: наименование
варианта (RL0801), номер
частоты (RL1002), частота
(RL1003)
Сущность RL имеет один первичный ключ, состоящий из атрибута
RL01. Других функциональных зависимостей (ФЗ) между атрибутами сущности нет.
Таблица 3.2 – Атрибуты сущности RS
Имя
RS01
RS02
RS03
Признак
элемента
Э
Э
Э
RS04
Э
RS05
ПГ
RS06
Э
Тип и формат
Признак
обяз.
VARCHAR(255)
VARCHAR(255)
VARCHAR(32)
Да
Да
Да
CHAR(8)
Да
VARCHAR(255)
Да
INTEGER
Да
Признак
ключа
PK
РК
Наименование атрибута
Заводской номер РС
Наименование модели РС
Тип РС (радиостанция,
передатчик, приемник или
радиорелейная станция)
Режим работы РС (симплекс или дуплекс)
Виды модуляции РС. ПГ:
вид модуляции (RS0501),
нижняя частота модуляции
(RS0502), верхняя частота
модуляции (RS0503)
Порядковый номер РС в
объекте связи
Сущность RS имеет один первичный ключ, состоящий из атрибутов
RS01 и RS02. В сущности RS имеется ФЗ атрибутов RS03, RS04 и RS05 от
атрибута RS02.
77
Таблица 3.3 – Атрибуты сущности RT
Имя
Тип и формат
Признак
обяз.
RS02
RT02
Признак
элемента
Э
Э
VARCHAR(255)
DECIMAL(12,6)
Да
Да
RT03
Э
DECIMAL(12,6)
Да
RT04
RT05
Э
Э
DECIMAL(10,3)
DECIMAL(8,3)
Да
Да
RT06
Э
DECIMAL(8,3)
Да
RT07
ПГ
VARCHAR(255)
Да
RT08
ПГ
VARCHAR(255)
Да
RT09
ПГ
VARCHAR(255)
Да
Признак
ключа
PK
Наименование атрибута
Наименование модели РС
Минимальная рабочая частота в МГц
Максимальная рабочая
частота в МГц
Шаг сетки частот в кГц
Минимальная мощность в
Вт
Максимальная мощность в
Вт
Полосы излучения передатчика. ПГ: вид модуляции (RT0701), уровень
ослабления в дБ (RT0702),
ширина полосы излучения
в кГц (RT0703)
Внеполосные и шумовые
излучения передатчика.
ПГ: вид модуляции
(RT0801), отстройка в кГц
(RT0802), ослабление
мощности в дБ (RT0803)
Ослабление излучений на
гармониках. ПГ: номер
гармоники (RT0901),
ослабление излучения в дБ
(RT0902)
Сущность RT имеет один первичный ключ, состоящий из атрибута
RS02. Других ФЗ между атрибутами сущности нет.
Таблица 3.4 – Атрибуты сущности RR
Имя
RS02
RR02
78
Признак
элемента
Э
Э
Тип и формат
Признак
обяз.
VARCHAR(255)
DECIMAL(12,6)
Да
Да
Признак
ключа
PK
Наименование атрибута
Наименование модели РС
Минимальная рабочая частота в МГц
RR03
Э
DECIMAL(12,6)
Да
RR04
RR05
Э
Э
DECIMAL(10,3)
DECIMAL(4,1)
Да
Да
RR06
Э
DECIMAL(4,1)
Да
RR07
Э
DECIMAL(4,1)
Да
RR08
ПГ
VARCHAR(255)
Да
RR09
ПГ
VARCHAR(255)
Да
Максимальная рабочая
частота в МГц
Шаг сетки частот в кГц
Ослабление чувствительности по зеркальному каналу в дБ
Ослабление чувствительности по каналу гетеродина в дБ
Ослабление чувствительности по зеркальному каналу гетеродина в дБ
Полосы пропускания приемника. ПГ: вид модуляции (RR0801), уровень
ослабления чувствительности в дБ (RR0802), ширина полосы пропускания
в кГц (RR0803), чувствительность в дБВт
(RR0804), отношение сигнал/помеха в дБ (RR0805),
защитное отношение в дБ
(RR0806)
Двухсигнальная избирательность приемника. ПГ:
вид модуляции (RR0901),
отстройка в кГц (RR0902),
ослабление чувствительности в дБ (RR0903)
Сущность RR имеет один первичный ключ, состоящий из атрибута
RS02. Других ФЗ между атрибутами сущности нет.
Таблица 3.5 – Атрибуты сущности RA
Имя
Тип и формат
Признак
обяз.
RA01
RA02
Признак
элемента
Э
Э
VARCHAR(255)
VARCHAR(255)
Да
Да
RA03
Э
VARCHAR(255)
Да
Признак
ключа
PK
PK
Наименование атрибута
Заводской номер антенны
Наименование модели антенны
Вид антенны (полуволновой вибратор, рефлекторная угловая и т. п.)
79
RA04
Э
DECIMAL(12,6)
Да
RA05
Э
DECIMAL(12,6)
Да
RA06
Э
DECIMAL(5,1)
Да
RA07
Э
DECIMAL(5,1)
Да
RA08
Э
DECIMAL(4,1)
Да
RA09
Э
CHAR(14)
Да
RA10
Э
DECIMAL(3,1)
RA11
RA12
Э
Э
DECIMAL(3,1)
DECIMAL(3,1)
Да
Да
RA13
Э
DECIMAL(3,1)
Да
RA14
Э
CHAR(13)
Да
RA15
Э
DECIMAL(3,1)
RA16
Э
INTEGER
RA17
Э
CHAR(13)
RA18
Э
DECIMAL(3,1)
RA19
Э
INTEGER
80
Да
Минимальная рабочая частота в МГц
Максимальная рабочая
частота в МГц
Минимальная высота
электрического центра в м
Максимальная высота
электрического центра в м
Усиление относительно
изотропной антенны в дБ
Поляризация (горизонтальная, вертикальная,
эллиптическая)
Угол эллиптической поляризации в градусах
Ослабление в фидере в дБ
Положение главного лепестка в вертикальной
плоскости в градусах
Ослабление по боковым
лепесткам в дБ
Тип диаграммы направленности в горизонтальной плоскости (направленная, круговая)
Половина ширины основного лепестка направленной антенны в горизонтальной плоскости в градусах
Количество основных лепестков в горизонтальной
плоскости
Тип диаграммы направленности в вертикальной
плоскости (направленная,
круговая)
Половина ширины основного лепестка направленной антенны в вертикальной плоскости в градусах
Количество основных лепестков в вертикальной
плоскости
RA20
Э
DECIMAL(5,1)
RA21
Э
DECIMAL(4,1)
RA22
Э
DECIMAL(4,1)
RA23
Э
DECIMAL(4,1)
RA24
Э
DECIMAL(4,1)
RA25
Э
INTEGER
Да
Высота электрического
центра антенны над объектом связи в м
Направление антенны в
горизонтальной плоскости
в градусах
Направление антенны в
вертикальной плоскости в
градусах
Координата X антенны
относительно центра объекта связи в метрах
Координата Y антенны
относительно центра объекта связи в метрах
Порядковый номер антенны в объекте связи
Да
Сущность RA имеет один первичный ключ, состоящий из атрибутов
RA01 и RA02. В сущности RA имеется ФЗ атрибутов RA03, RA04, …, RA19
от атрибута RA02.
Таблица 3.6 – Атрибуты сущности RO
Имя
Тип и формат
Признак
обяз.
RO01
Признак
элемента
Э
VARCHAR(255)
Да
RO02
Э
VARCHAR(255)
Да
RO03
Э
CHAR(12)
Да
RO04
Э
DECIMAL(5,1)
RO05
Э
DECIMAL(9,6)
Да
Признак
ключа
PK
Наименование атрибута
Наименование объекта
связи
Вид объекта связи (здание,
пункт связи, автомобиль,
машина связи и т. п.)
Признак мобильности объекта связи (стационарный,
мобильный)
Высота объекта связи над
уровнем Земли в м
Географическая широта
центра стационарного
объекта связи или центра
зоны перемещения мобильного объекта связи в
градусах
81
RO06
Э
DECIMAL(9,6)
RO07
Э
DECIMAL(4,1)
Да
Географическая долгота
центра стационарного
объекта связи или центра
зоны перемещения мобильного объекта связи в
градусах
Радиус зоны перемещения
мобильного объекта связи
в км
Сущность RO имеет один первичный ключ, состоящий из атрибута
RO01. Других ФЗ между атрибутами сущности нет.
Для ввода ключевых атрибутов двойным щелчком мыши по сущности
откроем окно редактирования ее свойств, перейдем в категорию Столбцы,
по нажатию кнопки Добавить введем имя поля. Чтобы сделать атрибут
ключевым, необходимо отметить галочкой пункт РК (рисунок 3.7). Данное
поле становится обязательным автоматически.
Рисунок 3.7 – Определение ключевого атрибута
Аналогичным образом зададим ключевые атрибуты для всех сущностей
информационной модели. Результат представлен на рисунке 3.8.
3.2.2.5. Устранение связей между сущностями типа «многие ко
многим»
Вместо связи «многие ко многим» между сущностями RS и RL вводятся
виртуальная сущность RL_RS и 2 идентифицирующие связи «один ко многим» от связываемых сущностей к виртуальной сущности. Связь от сущности RL к сущности RL_RS обозначается вербальной фразой «состоит», обратная фраза – «относится к». Связь от сущности RS к сущности RL_RS обозначается вербальной фразой «входит», обратная фраза – «относится к». Полученная диаграмма «сущность-связь» должна иметь вид, показанный на
рисунке 3.9.
82
Рисунок 3.8 – Инфологическая модель, основанная на ключах
3.2.2.6. Создание полной атрибутивной модели
Для того чтобы получить полную атрибутивную модель, необходимо
дополнить сущности не ключевыми атрибутами. Пример ввода данных о не
ключевых атрибутах для сущности RL показан на рисунке 3.10. Полная атрибутивная модель представлена на рисунке 3.11.
83
Рисунок 3.9 – Инфологическая модель без связей типа «многие ко многим»
Рисунок 3.10 – Ввод данных об атрибутах сущности RL
Примечание. Если атрибут не является обязательным, нужно убедиться, что в окне Свойства базы данных в категории Столбцы в пункте Обязательное не стоит галочка. Не обязательные к заполнению атрибуты справа
от имени имеют пометку (О).
84
Рисунок 3.11 – Полная атрибутивная инфологическая модель
85
3.2.3. Получение начальной логической структуры базы данных
Преобразуем полученную диаграмму «сущность-связь» в начальную логическую структуру реляционной базы данных.
В окне «Параметры документа базы данных» установить настройки, показанные на рисунках 3.12 – 3.14.
Рисунок 3.12 – Общие настройки документа базы данных
Рисунок 3.13 – Настройки таблиц документа базы данных
86
Рисунок 3.14 – Настройки отношений документа базы данных
Получим начальную логическую структуру базы данных, показанную на
рисунке 3.15.
3.2.4. Нормализация таблиц логической структуры базы данных
Предположим сначала, что значения всех атрибутов являются элементами данных и приведем полученные таблицы к 2НФ и 3НФ.
В таблицах RL, RT, RR, RO первичный ключ состоит из одного атрибута, поэтому эти таблицы находятся во 2НФ.
В таблице RL_RS все атрибуты входят в первичный ключ, между атрибутами отсутствуют ФЗ, и в таблице отсутствуют не ключевые атрибуты,
поэтому эта таблица находится в 3НФ.
В таблице RA имеется ФЗ не ключевых атрибутов RA03, RA04, …,
RA19 от атрибута RA02, входящего в первичный ключ, следовательно, эта
таблица не находится во 2НФ. Для приведения таблицы к 2НФ требуется
выделить в отдельную таблицу RA_RA02 атрибуты RA02, RA03, RA04, …,
RA19. Между таблицами RA_RA02 и RA имеется идентифицирующая связь
«один ко многим», которая помечается вербальной фразой «входит». Обратная фраза – «имеет».
87
Рисунок 3.15 – Начальная логическая структура базы данных
88
Таблица 3.7 – Атрибуты таблицы RA_RA02
Имя
Тип и формат
Признак
обяз.
RA02
Признак
элемента
Э
VARCHAR(255)
Да
RA03
Э
VARCHAR(255)
Да
RA04
Э
DECIMAL(12,6)
Да
RA05
Э
DECIMAL(12,6)
Да
RA06
Э
DECIMAL(5,1)
Да
RA07
Э
DECIMAL(5,1)
Да
RA08
Э
DECIMAL(4,1)
Да
RA09
Э
CHAR(14)
Да
RA10
Э
DECIMAL(3,1)
RA11
RA12
Э
Э
DECIMAL(3,1)
DECIMAL(3,1)
Да
Да
RA13
Э
DECIMAL(3,1)
Да
RA14
Э
CHAR(13)
Да
RA15
Э
DECIMAL(3,1)
RA16
Э
INTEGER
Признак
ключа
PK
Наименование атрибута
Наименование модели антенны
Вид антенны (полуволновой вибратор, рефлекторная угловая и т. п.)
Минимальная рабочая частота в МГц
Максимальная
рабочая
частота в МГц
Минимальная высота
электрического центра в м
Максимальная высота
электрического центра в м
Усиление относительно
изотропной антенны в дБ
Поляризация (горизонтальная, вертикальная,
эллиптическая)
Угол эллиптической поляризации в градусах
Ослабление в фидере в дБ
Положение главного лепестка в вертикальной
плоскости в градусах
Ослабление по боковым
лепесткам в дБ
Тип диаграммы направленности в горизонтальной плоскости (направленная, круговая)
Половина ширины основного лепестка направленной антенны в горизонтальной плоскости в градусах
Количество основных лепестков в горизонтальной
плоскости
89
RA17
Э
CHAR(13)
RA18
Э
DECIMAL(3,1)
RA19
Э
INTEGER
Да
Тип диаграммы направленности в вертикальной
плоскости (направленная,
круговая)
Половина ширины основного лепестка направленной антенны в вертикальной плоскости в градусах
Количество основных лепестков в вертикальной
плоскости
В таблице RS имеется ФЗ не ключевых атрибутов RS03, RS04, RS05 от
атрибута RS02, входящего в первичный ключ, следовательно, эта таблица не
находится во 2НФ. Для приведения таблицы к 2НФ требуется выделить в
отдельную таблицу RS_RS02 атрибуты RS02, RS03, RS04, RS05. Между
таблицами RS_RS02 и RS имеется идентифицирующая связь «один ко многим», которая помечается вербальной фразой «входит». Обратная фраза –
«имеет».
Таблица 3.8 – Атрибуты таблицы RS_RS02
Имя
RS02
RS03
Признак
элемента
Э
Э
RS04
Э
RS05
ПГ
Тип и формат
Признак
обяз.
VARCHAR(255)
VARCHAR(32)
Да
Да
CHAR(8)
Да
VARCHAR(255)
Да
Признак
ключа
PK
Наименование атрибута
Наименование модели РС
Тип РС (радиостанция,
передатчик, приемник или
радиорелейная станция)
Режим работы РС (симплекс или дуплекс)
Виды модуляции РС. ПГ:
вид модуляции (RS0501),
нижняя частота модуляции
(RS0502), верхняя частота
модуляции (RS0503)
В таблицах RL, RT, RR, RO, RL_RS, RA_RA02, RS_RS02 все не ключевые атрибуты зависят только от первичных ключей, поэтому эти таблицы
находятся в 3НФ.
Таблицы RS_RS02, RT и RR имеют одинаковые первичные ключи, поэтому их можно объединить в одну таблицу RS_RT_RR. В этой таблице атрибуты RS02, RS03, RS04, RS05 будут обязательными. Не ключевые атрибуты таблицы RT будут присутствовать в новой таблице, если модель радио90
средства имеет передающую часть. Не ключевые атрибуты таблицы RR будут присутствовать в новой таблице, если модель радиосредства имеет приемную часть. Поэтому все атрибуты таблиц RT и RR в новой таблице
RS_RT_RR должны быть объявлены не обязательными.
В результате будет получена нормализованная логическая структура БД,
показанная на рисунке 3.16. В ней все таблицы находятся в 3НФ (в предположении, что значения всех атрибутов являются элементами данных).
Для приведения полученных таблиц БД к 1НФ следует удалить атрибуты, значения которых не являются элементами данных.
В таблице RL атрибут RL08 заменяется подчиненной таблицей
RL_RL08. Атрибут RL09 заменяется таблицей RL_RL09, подчиненной таблице RL_RL08. Атрибут RL10 заменяется таблицей RL_RL10, подчиненной
таблице RL_RL08.
Таблица 3.9 – Атрибуты таблицы RL_RL08
Имя
RL01
RL0801
Признак
элемента
Э
Э
Тип и формат
Признак
обяз.
Признак
ключа
VARCHAR(255)
VARCHAR(255)
Да
Да
PK
PK
RL0802
Э
DATETIME
Да
RL0803
Э
DATETIME
Да
Наименование атрибута
Наименование РЛ
Наименование варианта
присвоения
Дата начала действия варианта
Дата окончания действия
варианта
Таблица RL_RL08 имеет первичный ключ, состоящий из атрибутов
RL01 и RL0801. Других ФЗ между атрибутами таблицы нет.
Таблица 3.10 – Атрибуты таблицы RL_RL09
Имя
RL01
RL0801
Признак
элемента
Э
Э
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
VARCHAR(255)
VARCHAR(255)
Да
Да
PK
PK
PK
Наименование РЛ
Наименование варианта
присвоения
Номер частоты, присвоенной на передачу
Частота, присвоенная на
передачу в МГц
RL0902
Э
INTEGER
Да
RL0903
Э
DECIMAL(12,6)
Да
91
Рисунок 3.16 – Нормализованная логическая структура базы данных
92
Таблица RL_RL09 имеет первичный ключ, состоящий из атрибутов
RL01, RL0801 и RL0902. Других ФЗ между атрибутами таблицы нет.
Таблица 3.11 – Атрибуты таблицы RL_RL10
Имя
RL01
RL0801
Признак
элемента
Э
Э
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
VARCHAR(255)
VARCHAR(255)
Да
Да
PK
PK
PK
Наименование РЛ
Наименование варианта
присвоения
Номер частоты, присвоенной на прием
Частота, присвоенная на
прием в МГц
RL1002
Э
INTEGER
Да
RL1003
Э
DECIMAL(12,6)
Да
Таблица RL_RL10 имеет первичный ключ, состоящий из атрибутов
RL01, RL0801 и RL1002. Других ФЗ между атрибутами таблицы нет.
В таблице RS_RT_RR атрибут RS05 заменяется подчиненной таблицей
RS_RS05.
Таблица 3.12 – Атрибуты таблицы RS_RS05
Имя
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
RS02
RS0501
RS0502
Признак
элемента
Э
Э
Э
VARCHAR(255)
VARCHAR(255)
DECIMAL(10,3)
Да
Да
Да
PK
PK
RS0503
Э
DECIMAL(10,3)
Да
Наименование модели РС
Вид модуляции РС
Нижняя частота модуляции в кГц
Верхняя частота модуляции в кГц
Таблица RS_RS05 имеет первичный ключ, состоящий из атрибутов
RS02, RS0501. Других ФЗ между атрибутами таблицы нет.
В таблице RS_RT_RR атрибуты RT07, RT09 заменяются подчиненными
таблицами RT_RT07, RT_RT09.Атрибут RT08 заменяется таблицей
RT_RT08, подчиненной таблице RT_RT07.
93
Таблица 3.13 – Атрибуты таблицы RT_RT07
Имя
RS02
RT0701
RT0702
RT0703
Признак
элемента
Э
Э
Э
Э
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
VARCHAR(255)
VARCHAR(255)
DECIMAL(4,1)
DECIMAL(10,3)
Да
Да
Да
Да
PK
PK
Наименование модели РС
Вид модуляции РС
Уровень ослабления в дБ
Ширина полосы излучения
в кГц
Таблица RT_RT07 имеет первичный ключ, состоящий из атрибутов
RS02, RT0701. Других ФЗ между атрибутами таблицы нет.
Таблица 3.14 – Атрибуты таблицы RT_RT08
Имя
RS02
RT0701
RT0802
RT0803
Признак
элемента
Э
Э
Э
Э
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
VARCHAR(255)
VARCHAR(255)
DECIMAL(10,3)
DECIMAL(4,1)
Да
Да
Да
Да
PK
PK
PK
Наименование модели РС
Вид модуляции РС
Отстройка в кГц
Ослабление мощности в
дБ
Таблица RT_RT08 имеет первичный ключ, состоящий из атрибутов
RS02, RT0701, RT0802. Других ФЗ между атрибутами таблицы нет.
Таблица 3.15 – Атрибуты таблицы RT_RT09
Имя
RS02
RT0901
RT0902
Признак
элемента
Э
Э
Э
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
VARCHAR(255)
INTEGER
DECIMAL(4,1)
Да
Да
Да
PK
PK
Наименование модели РС
Номер гармоники
Ослабление излучения в
дБ
Таблица RT_RT09 имеет первичный ключ, состоящий из атрибутов
RS02, RT0901. Других ФЗ между атрибутами таблицы нет.
94
В таблице RS_RT_RR атрибут RR08 заменяются подчиненной таблицей
RR_RR08. Атрибут RR09 заменяется таблицей RR_RR09, подчиненной таблице RR_RR08.
Таблица 3.16 – Атрибуты таблицы RR_RR08
Имя
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
RS02
RR0801
RR0802
Признак
элемента
Э
Э
Э
VARCHAR(255)
VARCHAR(255)
DECIMAL(4,1)
Да
Да
Да
PK
PK
RR0803
Э
DECIMAL(10,3)
Да
RR0804
RR0805
Э
Э
DECIMAL(4,1)
DECIMAL(4,1)
Да
Да
RR0806
Э
DECIMAL(4,1)
Да
Наименование модели РС
Вид модуляции РС
Уровень ослабления чувствительности в дБ
Ширина полосы пропускания в кГц
Чувствительность в дБВт
Отношение сигнал/помеха
в дБ
Защитное отношение в дБ
Таблица RR_RR08 имеет один первичный ключ, состоящий из атрибутов RS02, RR0801. Других ФЗ между атрибутами таблицы нет.
Таблица 3.17 – Атрибуты таблицы RR_RR09
Имя
RS02
RR0801
RR0902
RR0903
Признак
элемента
Э
Э
Э
Э
Тип и формат
Признак
обяз.
Признак
ключа
Наименование атрибута
VARCHAR(255)
VARCHAR(255)
DECIMAL(10,3)
DECIMAL(4,1)
Да
Да
Да
Да
PK
PK
PK
Наименование модели РС
Вид модуляции РС
Отстройка в кГц
Ослабление чувствительности в дБ
Таблица RR_RR09 имеет первичный ключ, состоящий из атрибутов
RS02, RR0801, RR0902. Других ФЗ между атрибутами таблицы нет.
В результате будет получена логическая структура БД, показанная на
рисунке 3.17. В ней все таблицы находятся в 3НФ.
95
Рисунок 3.17 – Логическая структура БД с таблицами в 3НФ
96
3.2.5. Добавление искусственных первичных ключей
В полученной логической структуре БД каждая таблица имеет первичный ключ, состоящий из атрибутов этой таблицы. В реальных БД часто
можно увидеть искусственные первичные ключи, идентифицирующие каждую строку таблицы. Эти искусственные ключи чаще всего получаются путем добавления к таблице искусственного атрибута целочисленного типа,
имя которого начинается с букв ID. Некоторые проектировщики БД вообще
не используют искусственных первичных ключей таблиц, а другие проектировщики БД добавляют искусственный первичный ключ к каждой таблице.
Рекомендуется добавить к таблице искусственный атрибут целочисленного типа (обычно начинающийся с букв ID) и объявить его первичным
ключом, если для этой таблицы выполняются следующие условия:
– имеющийся первичный ключ таблицы состоит из двух и более атрибутов;
– таблица имеет хотя бы одну подчиненную таблицу, в которой первичный ключ рассматриваемой таблицы является внешним ключом.
При добавлении к таблице искусственного первичного ключа следует
откорректировать связи между этой таблицей и всеми подчиненными таблицами (в качестве внешнего ключа подчиненных таблиц использовать новый
первичный ключ). Имеющийся первичный ключ таблицы следует объявить
уникальным альтернативным ключом.
В построенной логической структуре БД перечисленным выше условиям удовлетворяют таблицы RS, RA, RL_RL08, RT_RT07 и RR_RR08. Результат добавления искусственных первичных ключей к этим таблицам показан на рисунке 3.18.
3.2.6. Требования к содержанию и оформлению отчета
Отчет по лабораторной работе должен содержать:
1) название лабораторной работы, цель работы;
2) пул – список потенциальных сущностей;
3) информационную модель инфологического уровня (рисунок в отчете,
соответствующий полученному аналогу на рисунке 3.11, и приложенный
файл);
4) нормализованную информационную модель логического (концептуального) уровня с искусственными ключами (рисунок в отчете, соответствующий полученному аналогу на рисунке 3.18 и приложенный файл);
5) выводы по проделанной работе.
.
97
Рисунок 3.18 – Логическая структура БД с искусственными ключами
98
3.3. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Что описывает инфологическая модель предметной области?
2. Что определяет и для чего используется логическая модель предметной области?
3. Что определяет физическая модель предметной области?
4. Назовите 3 подуровня инфологической модели предметной области.
5. Дайте определения понятий «сущность» и «атрибут» сущности.
6. Что может быть значением атрибута в инфологической модели предметной области?
7. Дайте определения собственных и наследуемых атрибутов сущности.
8. Дайте определение первичного ключа сущности.
9. Дайте определение внешнего ключа сущности.
10. Какие виды связей между сущностями существуют и чем они отличаются?
11. Какие сущности называются независимыми и зависимыми?
12. Какие связи между сущностями называются идентифицирующими и
не идентифицирующими?
13. Для чего служит, и какие значения может принимать мощность связи?
14. Для чего используются ограничения ссылочной целостности?
15. Назовите возможные варианты действий по ограничениям ссылочной целостности.
16. Какая сущность или таблица БД находится в 1НФ?
17. Какая сущность или таблица БД находится во 2НФ?
18. Какая сущность или таблица БД находится в 3НФ?
19. Как устраняются связи между сущностями типа «многие ко многим».
20. Как таблицы БД приводятся ко 2НФ?
21. Как таблицы БД приводятся к 3НФ?
22. Как устраняются многозначные атрибуты из таблиц БД?
23. Для каких таблиц базы данных рекомендуется добавлять искусственные первичные ключи?
24. Что происходит с атрибутами первичного ключа таблицы при добавлении к таблице искусственного первичного ключа?
99
ЛИТЕРАТУРА
1. Станек, У.Р. Командная строка Microsoft Windows / У.Р. Станек. –
СПб.: Русская редакция, 2009. – 480 с.
2. Книттель, Б. Windows 7. Скрипты, автоматизация и командная строка /
Б. Книттель. – СПб.: Питер, 2012. – 764 с.
3. Станек, У.Р. Windows PowerShell 2.0. Справочник администратора /
У.Р. Станек. – СПб.: БХВ-Петербург, 2010. – 416 с.
4. Попов, А.В. Введение в Windows PowerShell / А.В. Попов. – СПб.:
БХВ-Петербург, 2009. – 464 с.
5. Леонтьев, Б.К. Microsoft Office Visio 2003 не для дилетантов. Построение проектов, диаграмм и бизнес-схем в ОС Windows XP /
Б.К. Леонтьев. – М: Новый издательский дом, 2005. – 384 с.
6. Карпук, А.А. Проектирование баз данных сложных систем. Основы
теории: монография / А.А. Карпук – Воронеж: Научная книга, 2015. –
178 с.
100
СОДЕРЖАНИЕ
ВВЕДЕНИЕ …………………………………………………..................... 3
ЛАБОРАТОРНАЯ РАБОТА № 1.
ВВОД – ВЫВОД ДАННЫХ В ФАЙЛЫ И РАБОТА С ОС
WINDOWS СРЕДСТВАМИ КОМАНДНОГО
ИНТЕРПРЕТАТОРА CMD ……………………………………………... 4
ЛАБОРАТОРНАЯ РАБОТА № 2.
ВВОД – ВЫВОД ДАННЫХ В ФАЙЛЫ И РАБОТА С ОС
WINDOWS СРЕДСТВАМИ ОБОЛОЧКИ
WINDOWS POWERSHELL ..………………………….……………….. 36
ЛАБОРАТОРНАЯ РАБОТА № 3.
РАЗРАБОТКА ДИАГРАММЫ «СУЩНОСТЬ – СВЯЗЬ»
И СТРУКТУРЫ ТАБЛИЦ БАЗЫ ДАННЫХ ………………. …..…... . 66
101
Учебное издание
ОПЕРАЦИОННЫЕ СИСТЕМЫ И БАЗЫ ДАННЫХ
Лабораторный практикум
для студентов специальностей
1-45 01 01 – Инфокоммуникационные технологии (по направлениям),
1-45 01 02 – Инфокоммуникационные системы (по направлениям)
В 2 частях
Часть 1
Составитель
Карпук Анатолий Алексеевич
Редактор Е.Б. Левенкова
Компьютерная верстка А.А. Карпук
План 2017/2018 уч.г., поз. 29
Подписано в печать 12.12.2018. Формат 60*84/16.
Бумага офсетная. Гарнитура «Times».
Печать цифровая.
Усл. печ. л. 3,96. Уч.-изд. л. 4,25.
Тираж 50 экз. Заказ 30.
Издатель и полиграфическое исполнение:
учреждение образования
«Белорусская государственная академия связи».
Свидетельство о государственной регистрации издателя, изготовителя,
распространителя печатных изданий
№ 1/241 от 20.11.2015.
Ул. Ф. Скорины, 8/2, 220114, Минск
102
Download