- •Лабораторные работы Лабораторная работа №1. Файловая оболочка Midnight Commander
- •Лабораторная работа №2. Информационные команды оболочки, работа со справочной системой
- •Лабораторная работа №3. Управление каталогами
- •Лабораторная работа №4. Файловые операции
- •Лабораторная работа №5. Права доступа к файлам
- •Лабораторная работа №6. Организация поиска
- •Лабораторная работа №7. Регулярные выражения. Команда egrep
- •Лабораторная работа №8. Перенаправление стандартных потоков, конвейеры
- •Лабораторная работа №9. Фильтры, обработка текстовых данных
- •Лабораторная работа №10. Архивирование и сжатие
- •Лабораторная работа №11. Текстовый редактор Vim
- •Vim [ключи] [файл].
- •Лабораторная работа №12. Сценарии оболочки
- •Лабораторная работа №13. Условные конструкции
- •Лабораторная работа №14. Циклические конструкции
- •Лабораторная работа №15. Одномерные массивы
- •Лабораторная работа №16. Потоковый редактор sed
- •Лабораторная работа №17. Язык обработки шаблонов gawk
- •If (условие) {действия1} [else {действия2}].
Лабораторная работа №13. Условные конструкции
Цель работы: освоить использование операторов case и if.
Необходимые сведения
Оператор case служит для выбора одного из нескольких вариантов:
case значение in
шаблон1)
команды1
;;
шаблон2)
команды2
;;
…
шаблонN)
командыN
;;
*)
команды_по_умолчанию
;;
esac
Принцип действия: среди всех шаблонов ищется первый, совпадающий со значением. Если он найден, то выполняется соответствующий ему список команд, завершенный двумя символами ;. Шаблон и список разделяются символом ). Одному списку команд может соответствовать несколько шаблонов, тогда они разделяются символом |.
Порядок сравнения шаблонов со значением не определен. Первое совпадение прекращает дальнейшее сравнение и приводит к выполнению соответствующего списка команд и выходу из структуры case. Часть *) является необязательной.
Для проверки файлов, сравнения строк и числовых значений используется команда test. Результатом команды является код завершения: 0 — соответствует значению TRUE, 1 — значению FALSE, 2 — значение ERROR. Команда test без аргументов возвращает значение FALSE.
Для проверки файлов используется синтаксис
test опции файл.
Для файла осуществляется проверка условий в соответствии с указанными опциями:
-e — файл существует;
-s — файл существует и имеет размер больше 0;
-r — возможно чтение файла;
-w — возможна запись в файл;
-x — возможно выполнение файла;
-z — файл имеет нулевую длину;
-f — обычный файл;
-d — каталог;
-c — байт-ориентированный файл;
-b — бит-ориентированный файл;
-h — символическая ссылка.
Для сравнения чисел используется синтаксис
test аргумент1 операция аргумент2.
Аргументами служат положительные или отрицательные целые числа, а также выражения типа -l строка, значением которых будет длина строки. В качестве операции сравнения могут выступать:
-eq — равно;
-ne — не равно;
-gt — больше;
-lt — меньше;
-ge — больше или равно;
-le — меньше или равно.
Для сравнения строк используется синтаксис
test выражение,
где выражение имеет вид
-z строка — истинно, если строка нулевой длины;
-n строка — истинно, если строка ненулевой длины;
строка1 = строка2 — истинно, если строки совпадают;
строка1 != строка2 — истинно, если строки не совпадают.
В команде test можно использовать составные условия с помощью логических операций: -a — конъюнкция, -o — дизъюнкция, ! — отрицание.
Пример: test –r info.txt –a –x info.txt.
Вместо команды test можно использовать конструкцию вида
[ выражение ].
Квадратные скобки должны быть отделены от выражения разделителями (пробелами). Пример: [ –r info.txt –a –x info.txt ].
Для выполнения команд в зависимости от истинности некоторого условия используется оператор if. Синтаксис:
if условие1
then
команды1
elif условие2
…
then
команды2
else
команды3
fi
Если код возврата условия1 равен 0, то выполняются команды1, иначе проверяется код возврата условия2. Если этот код равен 0, то выполняются команды2. Если условие1, условие2 и все последующие условия веток elif имеют коды возврата не равные 0, то выполняются команды3. В качестве условий обычно используется команда test.
Ключевые слова elif и else использовать необязательно. Если оператор не содержит elif, можно не указывать и else. Ключевых слов elif может быть несколько.
Ход работы
Создайте сценарий myscript9, запрашивающий у пользователя имя файла и число от 1 до 4 и выполняющий в зависимости от введенного значения следующие действия:
переименование файла добавлением к имени части _tmp;
удаление файла;
вывод полной информации о файле;
определение типа файла.
В случае, если было введено число отличное от 1,2,3,4 вывести соответствующее сообщение.
Измените предыдущий сценарий, добавив проверку существования файла с именем, которое ввел пользователь. Если файла не существует. вывести соответствующее сообщение и прекратить выполнение сценария с ошибочным кодом завершения.
Измените предыдущий сценарий, добавив запрет на выполнение второго пункта, если файл является каталогом. При этом должно появляться соответствующее сообщение.
Создайте сценарий myscript10, которому в качестве аргументов передаются три числа. В сценарии определяется максимальное из чисел.
Измените предыдущий сценарий, добавив проверку количества передаваемых аргументов. Если количество аргументов меньше трех, то сценарий должен завершиться с кодом 2. Если количество аргументов больше трех, то продолжить выполнение сценария, но вывести уведомляющее сообщение, что количество аргументов превышает три.
