Все сценарии, указанные в этой лабораторной работе набирайте в текстовом редакторе Vim. После набора команд сохраните сценарий, выйдите в оболочку. Проверьте права доступа к сценарию и при необходимости измените их, чтобы получить возможность исполнения сценария. Проверьте работоспособность сценария.
1. Перейдите в домашний каталог и добавьте его в список путей переменной PATH командой
PATH=$PATH:$PWD.
2. Создайте сценарий myscript, выводящий в одной строке через пробел текущую дату и имя текущего пользователя.
3. Создайте сценарий myscript2, выводящий информацию в виде:
Имя сценария: имя_сценария.
Количество аргументов: кол_во_аргументов
4. Создайте сценарий myscript3, запрашивающий у пользователя имя и фамилию, а затем выводящий строку «Hello, <имя> <фамилия>!» (знак ! обязателен).
5. Создайте сценарий myscript4, которому передаются четыре аргумента. Вывести их на экран в порядке 4,2,3,1, вставив между ними <пробел>:<пробел>.
6. Создайте сценарий myscript5, осуществляющий переименование файла, имя которого указывается в аргументе. Переименование должно осуществляться добавлением расширения .bak. После переименования вывести сообщение в виде
Файл старое_имя был успешно переименован в новое_имя.
7. Создайте сценарий myscript6, осуществляющий переименование файла, имя которого указывается в аргументе. Переименование должно осуществляться переводом всех символов имени в ВЕРХНИЙ регистр.
8. Создайте сценарий myscript7, в котором запрашиваются два числа A и B, после чего вызывается скрипт myscript8, вычисляющий сумму, разность и произведение этих чисел.
Цель работы: освоить использование операторов case и if.
Оператор case служит для выбора одного из нескольких вариантов:
case значение in
шаблон1)
команды1
;;
шаблон2)
команды2
;;
…
шаблонN)
командыN
;;
*)
команды_по_умолчанию
;;
Принцип действия: среди всех шаблонов ищется первый, совпадающий со значением. Если он найден, то выполняется соответствующий ему список команд, завершенный двумя символами ;. Шаблон и список разделяются символом ). Одному списку команд может соответствовать несколько шаблонов, тогда они разделяются символом |.
Порядок сравнения шаблонов со значением не определен. Первое совпадение прекращает дальнейшее сравнение и приводит к выполнению соответствующего списка команд и выходу из структуры 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
команды1
elif условие2
…
команды2
команды3
Если код возврата условия1 равен 0, то выполняются команды1, иначе проверяется код возврата условия2. Если этот код равен 0, то выполняются команды2. Если условие1, условие2 и все последующие условия веток elif имеют коды возврата не равные 0, то выполняются команды3. В качестве условий обычно используется команда test.
Ключевые слова elif и else использовать необязательно. Если оператор не содержит elif, можно не указывать и else. Ключевых слов elif может быть несколько.
1. Создайте сценарий myscript9, запрашивающий у пользователя имя файла и число от 1 до 4 и выполняющий в зависимости от введенного значения следующие действия:
— переименование файла добавлением к имени части _tmp;
— удаление файла;
— вывод полной информации о файле;
— определение типа файла.
2. В случае, если было введено число отличное от 1,2,3,4 вывести соответствующее сообщение.
3. Измените предыдущий сценарий, добавив проверку существования файла с именем, которое ввел пользователь. Если файла не существует. вывести соответствующее сообщение и прекратить выполнение сценария с ошибочным кодом завершения.
4. Измените предыдущий сценарий, добавив запрет на выполнение второго пункта, если файл является каталогом. При этом должно появляться соответствующее сообщение.
5. Создайте сценарий myscript10, которому в качестве аргументов передаются три числа. В сценарии определяется максимальное из чисел.
6. Измените предыдущий сценарий, добавив проверку количества передаваемых аргументов. Если количество аргументов меньше трех, то сценарий должен завершиться с кодом 2. Если количество аргументов больше трех, то продолжить выполнение сценария, но вывести уведомляющее сообщение, что количество аргументов превышает три.