uzluga.ru
добавить свой файл
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ


Кафедра кибернетики


Лабораторная работа №3

по дисциплине

Математическое обеспечение ЭВМ

на тему:

«Работа с интерпретатором команд shell»


Подготовила:

студентка группы М-61

Чернышева М.В.


Преподаватель:

Гостев И. М.


Москва, 2011

Теоретическая часть.


Действия с переменными:

-Простое назначение и доступ;

-Проверка переменной на существование;

-Чтение переменной со стандартного ввода;

-Создание неизменяемой переменной;

-Экспорт локальной переменной в переменные окружения.


Присвоение значения переменной.

Синтаксис: {имя=значение}+

Если переменная не существует, она неявно создаётся; иначе её предыдущее значение переписывается. Недавно созданная переменная всегда локальна, хотя может быть превращена в переменную окружения.


Переменные shell

Слова, начинающиеся с символа $ командный интерпретатор воспринимает как имена переменных. Переменные делятся на переменные окружения (они будут известны всем вызванным из этой shell программам и являются в этом смысле глобальными) и простые переменные. Команда unset уничтожает ранее определенные переменные. Чтобы определить переменную равной строке из нескольких слов, заключите ее в простые кавычки. Простые переменные могут быть массивами слов (что надо отличать от только что рассмотренного случая, когда переменная содержит строку из нескольких слов. Для объявления массива надо использовать круглые скобки.


Доступ к переменной

$имя Заменяется значением имя

${имя} Заменяется значением имя. Используется, если выражение следует сразу за алфавитно-цифровым символом, который иначе интерпретировался бы как часть имени переменной.

${имя-слово} Заменяется значением имя, если оно установлено, в противном случае – слово.

${имя+слово} Заменяется на слово, если имя установлено, в противном случае ничего не делает.

${name=word} Присваивает слово переменной имя, если имя ещё не установлено, и затем заменяется значением имя.

${имя?слово} Заменяется имя, если имя установлено. Если имя не установлено, слово выводится в стандартный канал ошибки, и происходит выход из shell. Если слово опущено, то вместо этого выводится стандартное собщение об ошибке.


Арифметические действия.

*,/,% Умножение, деление, остаток

+,- Сложение, вычитание

=,>,>=,<,<=,!= Операторы сравнения

& Логическое И

| Логическое ИЛИ


Метасимволы позволяют кратко записывать целые списки слов (главным образом - имен файлов). Shell рассматривает слово, в котором встречаются метасимволы, как шаблон для составления списка имен файлов:

* в шаблоне заменяет любую последовательность символов. Например m* раскроется в список всех файлов, начинающихся с буквы m. Существует небольшое исключение из этого правила: просто * опускает в списке те файлы, имена которых начинаются с точки.

? заменяет один символов. Например m? раскроется в список всех имен файлов, начинающихся с буквы m и состоящих точно из двух букв.

[.-.] позволяет указать интервал для подставляемого символа.

{...,...} позволяет перечислить слова для подстановки.

~ позволяет указать домашний каталог пользователя:

~name/ эквивалентно указанию полного пути в домашний каталог пользователя name

~/ эквивалентно указанию полного пути в собственный домашний каталог.


Структуры управления.

Forindodone

Синтаксис:

for <переменная> in <список значений>

do <список команд>

done


If...then...fi

Синтаксис:

if условие1

then

списокКоманд1

elif условие2 ...необязательная

...elif может повторяться несколько раз.

then

списокКоманд2

else ...необязательная, else может появляться один раз

списокКоманд3

fi

Выполняются команды из условие1. Если они завершаются удачно, выполняются команды

из список Команд1. Если последняя команда условие1 завершается неудачно, и если указан один или более elif-компонентов (возвращающих истину), выполняются команды, указанные после then. Если команда возвращает сигнал об ошибке, и в скрипте задано условие else, выполняются команды, указанные после него.


Практическая часть. Работа с базой данных.

Задания для работы с базой данных:

  1. Поиск по заданному шаблону

  2. Сортировка по выбранному полю

  3. Добавление новой записи в конец файла

  4. Добавление новой записи в выбранное место базы данных


База данных в начальном неизменённом варианте имеет следующий вид:

Rain Soldier 4th 19

Limbovsky Sergeant 4th 25

Lokk Soldier 2nd 20

Payne Captain 5th 26

Emerald General 4th 31

Smith Soldier 3th 18

Cooper General 2th 33

Caddy Soldier 3th 21


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

Текст программы приведён ниже:


Корневой файл lab3:


echo ‘Choose actions:

  1. Write in the end of the Database

  2. Write not in the end of the Database

  3. Sort by the defined field

  4. Search’

read choice # переменная choice будет отвечать вызовам соответсвующих команд


case $choice in

1) writting_end ;; # Вызов программы записи в конец базы

2) writting_between ;; # Вызов программы записи в произвольное место базы

3) sort_by_field ;; # Сортировка по выбранному полю

4) search_ul ;; # Поиск по заднному шаблону

esac


Таким образом из файла lab3 будут вызываться программы обработки. Опишем их.


Программа writting_end:


echo ‘Enter new record to add in the end:’ # приглашение к вводу строки

read newRecord # заводим для новой строки переменную

echo $newRecord >> db # добавляем запись в конец Базы данных


Программа writting_between:


echo ‘Enter number of the line to place new data below:’ # Приглашение к воду номера

read numLine


echo ‘Enter the text to add:’ # Приглашение к вводу новой строки

read newLine

(echo $numLine;cat db | wc –l; cat db) | awk ‘{if (NR == 1) numline =$1; if (NR == 2) size = $1; if (NR > 2) if (NR <=numline+2) print$0;}’ >>tdb


# На входной поток программируемого фильтра awk будут поданы: номер строки, #количество строк и сама база данных. Фильтр считывает номер строки и количество #строк и заводит для них специальные переменные. Далее происходит запись во #временный файл вплоть до строки с заданным номером включительно.


echo $newLine >> tdb # Добавляем новую строки после строки с избранным номером.


(echo $numLine;cat db | wc –l; cat db) | awk ‘{if (NR == 1) numline =$1; if (NR == 2) size = $1; if (NR > numline+2) print$0;}’ >>tdb

# Во временный файл записываются строки с номером большим чем у выбранной строки


rmf db # Удаление основного файла

mv tdb db # Переменовываем временный файл в постоянный.


echo

echoAdding results’:

cat db # Выводим на печать новую базу данных


Программа sort_by_field:

echoEnter field number to sort’ # Приглашение к вводу поля для сортировки

read fieldForSort # Сохранение номера поля в переменной

sortk $fieldForSort db >> tdb # Сортировка и запись во временный файл

rmf db # Удаление основного файла

mv tdb db # Переименование временного файла в основной


echo

echoSorting results

cat db # Выводим на печать новую базу данных


Программа search_ul:

echoEnter a pattern to search:’ # Приглашение к вводу шаблона для поиска


read pattern # Сохранение шаблона в переменной


echo

echoSearch results:’ # Вывод готовых результатов поиска

cat db | grep $ pattern #


Результаты обработки базы данных:

1) sort_by_field

-4

Smith Soldier 3th 18

Rain Soldier 4th 19

Lokk Soldier 2nd 20

Caddy Soldier 3th 21

Limbovsky Sergeant 4th 25

Payne Captain 5th 26

Emerald General 4th 31

Cooper General 2th 33




2) search_ul

- General

Emerald General 4th 31

Cooper General 2th 33


3) writting_end

- Wolowitz Major 5th 27


Smith Soldier 3th 18

Rain Soldier 4th 19

Lokk Soldier 2nd 20

Caddy Soldier 3th 21

Limbovsky Sergeant 4th 25

Payne Captain 5th 26

Emerald General 4th 31

Cooper General 2th 33

Wolowitz Major 5th 27


4) writing_between

-

Smith Soldier 3th 18

Rain Soldier 4th 19

Lokk Soldier 2nd 20

Caddy Soldier 3th 21

Limbovsky Sergeant 4th 25

Payne Captain 5th 26

Johnson Captian 3th 28

Emerald General 4th 31

Cooper General 2th 33

Wolowitz Major 5th 27