Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб ОС_5-8.doc
Скачиваний:
8
Добавлен:
04.11.2018
Размер:
559.62 Кб
Скачать
    1. Условные операторы. Оператор if ... Then

Команда if говорит shell программе, что нужно выполнить последовательность команд после then, если последняя команда в списке команд конструкции if выполнилась успешно. Конструкции if заканчиваются ключевым словом fi.

      1. Общий формат конструкции if

if<ENTER>

команда _1<ENTER>

последняя команда<ENTER>

then<ENTER>

команда _1<ENTER>

последняя команда<ENTER>

fi<ENTER>

Например, shell программа search демонстрирует применение конструкции if ... then. Программа search использует команду grep для поиска слова в файле. Если grep выполнилась успешно, то программа отображает найденное слово. После ввода:

cat search<ENTER>

экран будет выглядеть следующим образом:

echo Введите искомое слово и имя файла, в котором будем искать

read word

read file

if grep $word $file

then echo $word is in $file

fi

Эта программа отображает вывод команды grep. Если вы хотите сохранить ответ системы на команду grep в вашей программе, то воспользуйтесь файлом /dev/null, изменив командную строку if на следующую:

if grep $word $file > /dev/null<ENTER>

Теперь выполните команду search. Она ответит только сообщением, указанным после команды echo.

Конструкция if ... then ... else может исполнять альтернативный набор команд, стоящий после else, в случае, если последовательность if является ложью. Формат этой конструкции следующий:

if<ENTER>

команда_1<ENTER>

последняя команда<ENTER>

then<ENTER>

команда _1<ENTER>

последняя команда<ENTER>

else<ENTER>

команда _1<ENTER>

последняя команда<ENTER>

fi<ENTER>

С помощью этой конструкции вы можете усовершенствовать программу search, так что она будет сообщать вам и найденное слово и то, что слово не найдено. В этом случае программа search будет выглядеть следующим образом:

echo Введите искомое слово и имя файла, в котором будем искать

read word

read file

if

grep $word $file > /dev/null

then

echo $word is in $file

else

echo $word is NOT in $file

fi

Для команд существуют логические операции:

Логическое и: команда && команда

Логическое или: команда || команда

Логическое не: ! команда

    1. Безусловная передача управления

Команда break безусловно останавливает выполнение любого цикла, в котором он встречается и передает управление команде, следующей после ключевых слов done или fi.

Команда continue приведет к тому, что программа немедленно перейдет к следующей итерации цикла while или for без выполнения остальных команд в цикле.

  1. Отладка программы

Для нахождения и корректировки ошибок вам могут понадобиться две опции команды sh:

sh -v shellprogramname

(печатает вводимые shell строки, как если бы они были прочитаны системой);

sh -x shellprogramname

(печатает команды и их аргументы по мере их выполнения).

Контрольные вопросы

  1. Перечислите основные функции командного интерпретатора Shell.

  2. Как осуществляется вход и выход из оболочки?

  3. Расскажите о метасимволах используемых в Shell и опишите их основные функции.

  4. Опишите механизм создания и запуска программ в Shell.

  5. Расскажите о позиционных и специальных параметрах.

  6. Расскажите об именованных параметрах, опишите механизм их создания.

  7. Как удалить именованные переменные?

  8. Как изменить значение зарезервированным переменным?

  9. Опишите известные вам способы присвоения значений переменным.

  10. Расскажите о том, как можно производить вычисления в Shell.

  11. Расскажите об известных вам конструкциях языка программирования Shell.

  12. Опишите механизм отладки программ в Shell.

Практическая часть

  1. Войдите в командный интерпретатор (если он не запустился автоматически).

  2. Создайте несколько локальных и глобальных переменных. Используя переменные a, b, c, d, x, создайте сценарий записи в файл результатов вычисления заданных выражений:

, a=[1,2,5,8,10]

Для написания вам понадобятся операторы read, echo, for и let; сделайте ваш программный файл исполняемым.

  1. Напишите программу, которая будет помещать в заданный текстовый файл, вводимые вами имена студентов вашей группы и оценки по дисциплине «Операционные системы». Вам понадобятся операторы read, echo и while.

  2. Измените программу из предыдущего задания таким образом, чтобы файл со списком студентов не содержал повторяющихся записей и при вводе повторяющейся информации на экран выводились соответствующие сообщения. Вам понадобится операторы if, else, break или continue. Рекомендуется очистить содержимое файла, если в нём уже есть повторения.

  3. Удалите переменные, созданные вами в начале работы.

Примечание

Вы можете проверить правильность выполнения ваших заданий с помощью специальной контролирующей программы:

Формат: <путь> labcontrol name1 name2 num

где name1 – имя проверяемой программы;

name2 – имя файла результатов проверяемой программы;

num – номер задания;

<путь> – путь к файлу к контролирующей программе.

Пример

$./ labcontrol prog res2 – вызов контролирующей программы, если она находится в текущей директории для проверяемой программы prog с файлом результата res для задания №2 ($ - приглашение системы).

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

Задание 2

Входные данные: значения переменных b, c, d вводятся с клавиатуры отдельными операторами read.

Выходные данные: результаты вычислений выводятся в файл результатов отдельными операторами echo.

Задание 4

Входные данные: фамилии студентов и оценки вводятся с клавиатуры отдельными операторами read (в цикле), причем сначала вводятся фамилии студентов, а затем их оценки.

Выходные данные: таблица оценок студентов выводятся в файл результатов отдельными операторами echo по образцу. Образец вывода:

Иванов – 5

Петров – 3

Сидоров – 2

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

Приложение 1. Руководство пользователя

Для использования контролирующей программы нужно:

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

  2. Установить права доступа к файлу с программой как к исполняемому командой chmod 111 labcontrol.

  3. Создать или скопировать в каталог с программой файлы с примерами и эталонные файлы результатов для всех проверяемых заданий. Для проверки данной лабораторной работы (а именно заданий 2 и 4) должны быть созданы следующие файлы:

Для задания 2

Файл 2_exp(без расширения):

3

1

2

Файл 2_pat(без расширения):

250

1

Для задания 4

Файл 4_exp(без расширения):

Иванов

4

Петров

3

Кулебякин

5

Иванов

2

Файл 4_pat(без расширения):

Иванов – 4

Петров – 3

Кулебякин – 5

  1. Запретить доступ по записи к этим файлам, введя команды chmod 444 2_exp; chmod 444 2_pat; chmod 444 4_epx; chmod 444 4_pat.

Примечание

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

Приложение 2. Контролирующая программа

if ! test –f $3_exp

then echo Отсутствует файл с примером.; exit

#Проверка существования файла с исходными данными

fi

if ! test –f $3_pat

then echo Отсутствует файл с образцом.; exit

#Проверка существования файла с контрольными результатами

fi

if ! test –f $1

then echo Отсутствует файл с программой $1.; exit

#Проверка существования файла со сценарием, написанным студентом

fi

if ! test –r $1

then echo Ошибка: нет доступа по чтению к файлу с программой $1.; exit

#Проверка правильности установки доступа к файлу с программой

fi

mv $2 temp.txt 2>/dev/null

#Сохранение исходного файла с результатами работы программы студента под другим именем с перенаправлением стандартного вывода ошибок

if ! test –x $1

then echo Ошибка: файл с программой $1 не является исполняемым.

#Проверка правильности установки доступа к файлу с программой

fi

sh $1 <$3_exp >/dev/null 2>/dev/null

#Выполнение проверяемой программы с перенаправлением на её вход файла с исходными данными (не выводя сообщения этой программы)

if ! test –f $2

then echo Файл результата $2 не найден.; mv temp.txt $2 2>/dev/null; exit

#Проверка существования файла с результатами

fi

if diff $2 $3_pat –q >/dev/null 2>/dev/null

#проверка идентичности результата выполнения программы и контрольного варианта

then echo Результат выполнения программы верен!

else echo Ошибка: неверный результат выполнения программы!

fi

mv temp.txt $2 2>/dev/null

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

Приложение 3. Указания к использованию контролирующей программы

Данная программа (labcontrol) написана на BASH как исполняемый файл. Формат: <путь>labcontrol name1 name2 num

где name1 – имя проверяемой программы;

name2 – имя файла результатов проверяемой программы;

num – номер задания;

<путь> – путь к файлу к контролирующей программе.

Пример

$./ labcontrol prog res2 – вызов контролирующей программы, если она находится в текущей директории для проверяемой программы prog с файлом результата res для задания №2.

Для работы программы необходимы файлы с именами <номер задания>_exp (файл входных данных) и <номер задания>_pat (образцовый файл результатов).

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

Результатом работы программы являются:

  • сообщения об отсутствии необходимых файлов (если они не найдены);

  • результат проверки на то является ли проверяемая программа исполняемым файлом;

  • результат проверки на наличие доступа по чтению к проверяемой программе;

  • результат сверки файла результатов проверяемой программы с эталонным файлом результатов.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]