Условные операторы. Оператор if ... Then
Команда if говорит shell программе, что нужно выполнить последовательность команд после then, если последняя команда в списке команд конструкции if выполнилась успешно. Конструкции if заканчиваются ключевым словом fi.
Общий формат конструкции 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
Для команд существуют логические операции:
Логическое и: команда && команда
Логическое или: команда || команда
Логическое не: ! команда
Безусловная передача управления
Команда break безусловно останавливает выполнение любого цикла, в котором он встречается и передает управление команде, следующей после ключевых слов doneили fi.
Команда continue приведет к тому, что программа немедленно перейдет к следующей итерации цикла while или for без выполнения остальных команд в цикле.
Отладка программы
Для нахождения и корректировки ошибок вам могут понадобиться две опции команды 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; сделайте ваш программный файл исполняемым.
3. Напишите программу, которая будет помещать в заданный текстовый файл, вводимые вами имена студентов вашей группы и оценки по дисциплине «Операционные системы». Вам понадобятся операторы read, echo и while.
4. Измените программу из предыдущего задания таким образом, чтобы файл со списком студентов не содержал повторяющихся записей и при вводе повторяющейся информации на экран выводились соответствующие сообщения. Вам понадобится операторы if, else, breakилиcontinue. Рекомендуется очистить содержимое файла, если в нём уже есть повторения.
5. Удалите переменные, созданные вами в начале работы.
Примечание
Вы можете проверить правильность выполнения ваших заданий с помощью специальной контролирующей программы:
Формат: <путь> 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
Внимание! В программах не должно быть операторов ввода и вывода, вводящих или выводящих какую либо вспомогательную информацию, а при выводе в файл - лишних пробелов или других символов.