
- •Московский институт электроники и математики
- •«Разработка командных процедур в ос 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
- •Отчет о работе
- •Библиографический список
8.3. Оператор выбора case
Оператор выбора caseудобен для организации ветвления программы на основе совпадения шаблонов (образцов).
Можно выполнить подобную операцию с помощью цепочки if-elseif, но операторcaseкороче, удобнее и нагляднее:
Формат оператора case:
caseпеременная
in
шаблон 1) команда
команда
. . . . . . .
команда ;;
. . . . . . . . . . . . . . . . . . . .
шаблон N. команда
команда
. . . . . . .
команда ;;
esac
Если значение переменной совпало со значением шаблона, то выполняются команды, расположенные до символов ';;', затем те, что после esac.
Пример_1:Командная процедураmenu
echo "
ls
date
pwd
which function do you wish? \c"
read command
case "$command"
in
ls –Fc
;;
date
;;
*) echo not available
;;
esac
8.4. Арифметические операции с переменными Shell
Shellне предназначендля проведения арифметических операций с числами. Параметры рассматриваются какстроки. Однако для проведения операций с целыми числами всё-таки существует встроенная командаexpr.
В команде exprиспользуются следующие арифметические операции:
+ - / * %
Команда exprпосылает результат настандартный вывод.
Примеры:
%expr3 + 2
5
%expr7 "*" 8 (или так: %expr7 \* 8
56
%n=100
%expr $n + 1
101
Так как exprпосылает результат на стандартный вывод, можно использовать обратные апострофы, чтобы присвоить результат работыexprпеременной:
%i=`expr 3 + 2`
echo $i
5
%n=100
%n=`expr $n + 1
echo$n
101
8.5 Стандартные переменные Shell
Некоторые имена переменных зарезервированы в Shellдля специальных целей.
Вот некоторые из них:
HOMEкаталог, в который пользователь попадает при входе в систему или при выполнении командыcdбез аргументов;
LOGNAMEрегистрационное имя пользователя;
PATHсписок полных имен каталогов, в которых производится поиск файла при указании его неполного имени;
IFSпоследовательность символов, являющихся разделителем в командной строке;
TERMтип терминала;
PS1 первичное приглашение интерпретатора команд (для интерпретатораshэто -'$'; дляcsh-'%');
PS2 вторичное приглашение (по умолчанию -'>'). В интерактивном режиме перед вводом команды интерпретатор выводит первичную подсказку. Если нажата клавишаEnter, но для завершения команды требуется дальнейший ввод, то выводится вторичное приглашение.
Примечание. Список стандартных переменных и переменных, определенных пользователем, можно вывести по команде set.
Пример_1:ввод с клавиатуры командной процедуры, состоящей из нескольких строк:
%for n in 1 2 3
>do# продолжение ввода
>echo$n# командной процедуры
>done# после вторичной подсказки
1
2
3
%
Пример_2:модификация стандартной переменной:
%HOME=/usr/home/mydir
%PS2="=>"
Пример_3: к значению переменнойPATHможно добавить новый каталог:
PATH=$PATH:/home/mydir
Задание по лабораторной работе:
ввести несколько переменных и присвоить им значения;
просмотреть значения всех введенных переменных (встроенная команда set);
создать простейшую командную процедуру, в которой используется значение позиционных параметров;
ввести и отладить командные процедуры: print3, cmplist, copy3, menu;
модифицировать процедуру print3 так, чтобы она выводила на стандартный вывод только текстовые файлы;
модифицировать процедуру cmplistтак, чтобы она правильно работала в случае, когда все сравниваемые файлы одинаковы;
модифицировать стандартные переменные sh(PS1,PS2,PATH);
проанализировать управляющий командный файл (.profile) в домашнем каталоге и каталоге /etc;
просмотреть стартовый командный файл /etc/rcи конфигурационный командный файл /etc/rc.conf;
опробовать ввод командных процедур в интерактивном режиме.