- •Московский институт электроники и математики
- •«Разработка командных процедур в ос Unix»
- •1. Цель лабораторной работы
- •2. Интерпретаторы команд ос Unix
- •3. Основные реализации командных интерпретаторов
- •4. Аргументы командных процедур
- •5. Простейшая командная процедура (командный файл)
- •6. Специальные параметры интерпретатора команд
- •7. Команда test
- •7.1. Cравнение строк
- •7.2. Cравнение чисел
- •7.3. Проверка состояния файла
- •8. Управляющие конструкции высокого уровня
- •8.1. Условный оператор (if)
- •8.2. Операторы цикла (for и while)
- •8.2.1. Оператор цикла for
- •Пример_1: Процедура print1 печатает (выводит в стандартный вывод) три файла, перечисленные в списке значений цикла for.
- •8.2.2. Оператор цикла while
- •8.3. Оператор выбора case
- •8.4. Арифметические операции с переменными Shell
- •8.5 Стандартные переменные Shell
- •Отчет о работе
- •Библиографический список
7.3. Проверка состояния файла
В случае использования команды testдля проверки состояния файла <выражение> может состоять из следующих примитивов:
-rфайл - истина, если файл существует и доступен для чтения;
-wфайл - истина, если файл существует и доступен для записи;
-xфайл - истина, если файл существует и доступен для выполнения;
-fфайл - истина, если файл существует и является обычным файлом;
-dфайл - истина, если файл существует и является каталогом;
-cфайл - истина, если файл существует и является специальным символьно-ориентированным файлом;
-bфайл - истина, если файл существует и является специальным блок-ориентированным файлом.
8. Управляющие конструкции высокого уровня
8.1. Условный оператор (if)
Формат простого оператора if:
ifусловие
then
команда
команда
. . . . . . .
fi
Если условиеистинно (True), токоманды, которые находятся между служебными словамиthenиfiбудут исполнены, в противном случае они будут пропущены.
Примечание. (Использование команды test в операторе if).
Команда test часто используется в составе условного оператора в командных процедурах.
if test "`date + %d`" -eq 24
then
echo OK
fi
Условие представляет собой выражение, которое может быть заключено в квадратные скобки:
[условное_выражение]
Кроме того, в выражении могут применяться операторы –a (AND) и –o (OR):
[$i –gt 7 –a $i –le 99]
По сути, мы использовали команду test, однако применение квадратных скобок позволяет не указывать имени команды.
Приведенное выражение будет верно только в том случае, если переменная i > 7 и i ≤ 99.
Формат расширенного оператора if:
ifусловие
then
команда
команда
. . . . . . .
else
команда
команда
. . . . . . .
fi
else
команда
команда
. . . . . . .
fi
Пример_1:Командная процедура (назовём еёwho2), выводящая сведения о работе в данный момент одного из зарегистрированных в системе пользователей.
if
who | grep "$1" > /dev/null
then
echo "$1 is logged on"
else
echo "$1 is not logged on"
fi
Запуск командной процедуры предполагает задание имени пользователя в качестве параметра:
%who2petrov
Если пользователь petrovработает в системе в момент запуска процедурыwho2, то будет выведено сообщение:
petrovisloggedon(Петров зарегистрировался в системе)
в противном случае будет выведено сообщение:
petrovisnotloggedon(Петров не зарегистрировался системе)
В качестве условия в команде ifиспользуется конвейер из двух команд:
who- выводит в стандартный вывод сведения о работающих в настоящее время пользователях с указанием времени входа в систему;
grep– пропускает на выход только те строки из вывода командыwho, в которых встречается заданный в качестве формального параметра $1 имени пользователя.
8.2. Операторы цикла (for и while)
Все языки программирования включают механизм, который позволяет многократно повторять группу операторов.
8.2.1. Оператор цикла for
Формат оператора цикла for:
forпеременнаяinсписок
do
команда
команда
. . . . . . .
done
Список команд, заключенный между ключевыми словами do . .. doneвыполняется один раз для каждого значения из списка. При этом очередное выбираемое значение из списка присваивается переменной, имя которой указано слева от ключевого словаin.
Список значений может задаваться символьными константами и значением некоторой переменной, содержащей последовательность, разбиваемую разделителями.