
УТС 8 семестр заочники / Лабораторные работы / 2
.pdf1
ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 2 Операционная системе QNX.
Встроенные команды интерпретатора SH.
Курс: Программные средства систем реального времени.
ЦЕЛЬ РАБОТЫ: получить навыки использования команд интерпретатора.
Утилита Sh является командным интерпретатором в системе QNX (QNX-SHELL). Утилита поддерживает интерфейс между пользователем и операционной системой. К SHELL командам относятся:
-управляющие конструкции;
-регулярные встроенные утилиты;
-специальные встроенные команды.
-внешние утилиты;
-SHELL сценарии.
Вданном практическом занятии будут рассмотрены три первых позиции приведенного списка.
1.УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ Предназначены для организации ветвления в командной последовательности в
зависимости от выходного статуса последней выполненной команды. Выходной статус каждой SHELL-команды может иметь два значения:
true -"истина" (нулевое значение); false -"ложь" (неулевое значение).
Существую две встроенные команды SHELL true и false
которые на выходе всегда формируют соответственно статусы "истина" и "ложь".
1)case кострукция case word in образ1) list;;
образ2)|образ3) list;;
...
esac
case команда осуществляет ветвления в зависимости от значения слова word. В данном тексте и далее list представляет собой одну или несколько команд интерпретатора разделенных символами ; | && ||.
2) if конструкция if expr
then
list [elif expr then
list] ...
[else
list]
fi
Здесь и далее квадратные скобки обозначают необязательные поля. Выражение expr (это может быть команда) вычисляется. Если выходной статус равен нулю, то тогда
2
список команд определенных then выполняются и if конструкция завершается. Если же выходной статус не равен нулю тогда вычисляется выражение elif expr и в случае нулевого выходного статуса выполняется список команд следующего then. В противном случае выполняется список команд соответствующий else, и.т.д.
3)for конструкция - служит для образования цикла for name [in word ...]
do list
done
Переменная name получает значение каждого слова при этом всякий раз выполняется список list. Если поле слов отсутствует цикл выполняется только один раз.
4)while кострукция - служит для образования цикла while list1
do list2
done
Команда выполняет список команд list1 и если выходной статус нулевой (true), то выполняется список команд list2 и цикл повторяется. В противном случае осуществляется выход из цикла.
5)until конструкция - служит для образования цикла until list1
do list2
done
Команда выполняет список команд list1, и если статус не равен нулю (false), то выполняется список команд list2 и цикл повторяется. В противном случае осуществляется выход из цикла.
6)function конструкция служит для определения функции function name
{
list
}
Допустимый вариант name ()
{
list
}
УПРАЖНЕНИЕ 1
В данном упражнении используется встроенная команда print интерпретатора Shell. Эта команда предназначена для вывода на консоль аргументов в том виде в котором они представлены в команде. Синтаксис команды:
print [argument ...]
аргументы разделяются пробелами и завершаются <new line>.
-проверить действие команды print;
-проверить и записать в отчет результат выполнения управляющих конструкций:
if true |
if false |
|
3 |
then |
then |
print 1 |
print 1 |
else |
else |
print 2 |
print 2 |
fi |
fi |
- проверить и записать в отчет результат выполнения управляющих конструкций:
while true |
until false |
do |
do |
print 1 |
print 1 |
done |
done |
(бесконечный цикл можно остановить, набрав комбинацию ctrl/c)
-самостоятельно написать примеры, демонстрирующие работу конструкций for и case. Результаты записать в отчет.
-написать и проверить выполнение функции выполняющей те же действия, что и ваша конструкция for. Результаты записать в отчет.
2.СПЕЦИАЛЬНЫЕ ВСТРОЕННЫЕ КОМАНДЫ
Эти команды встроены в shell, их действие не дублируется внешними утилитами. В п.1 уже использовались команда , print которая относиться к этой группе.
1) команда alias [name=value ...]
-устанавливает синоним произвольному имени. Команда без аргументов показывает список всех назначений:
УПРАЖНЕНИЕ 2
-назначте произвольный синоним для функции определенной вами в упражнении 1;
-отобразить на экране и записать в отчет строки синонимов для вашей функции, а
также для функций true, false, echo.
2) команда unalias alias_name
- удаляет синонимы определенные именем alias_name. -проверьте действие команды удалив ваш синоним.
3) команда ":" (двоеточие) - пустая команда - команда ":" не выполняет никаких действий и всегда возвращает
нулевой статус. |
|
4) команда |
let [argument ...] |
- без аргументов эта команда всегда возвращает ненулевой выходной статус не производя никаких действий. Если аргументы присутствуют то каждое выражение вычисляется и если последнее выражение не равно нулю то возвращается нулевой статус,
впротивном случае возвращается ненулевой статус.
Вкоманде let можно использовать арифметические операции - + * /, и операторы отношения < > <= >= == !=.
УПРАЖНЕНИЕ 3
-выполнить конструкцию a=3
while (let a) do
print 1 let a=a-1
done
-результаты записать в отчет.
4
5) команда export - вводит переменные окружения ехроrt name[=word]
export -p
команда позволяет установить переменные окружения, которые будут действительны для всех последующих команд. Команда с опцией -p отображает значение всех переменных окружения.
При запуске shell устанавливает следующие переменные окружения:
CDPATH - путь к директорию, который используется командой cd без аргументов; HOME - путь к директорию пользователя;
IFS - разделители полей; LOGNAME - имя пользователя;
PATH - путь к директорию откуда shell выбирает исполняемые программы; PS1 - первая подсказка (по умолчанию "$");
PS2 - вторая подсказка (по умолчанию ">"); SHELL - путь к shell определенный пользователем; TERM - тип терминала;
TMPDIR - путь к директорию для временных файлов; TZ - установка временной зоны.
УПРАЖНЕНИЕ 4
-установить переменную окружения (ВАШЕ ИМЯ)=5;
-проверить установку переменной, записать в отчет значения переменных HOME,
LOGNAME, SHELL.
5) команда ехес - выполняет команду shell и/или командный файл
(shell - сценарий)
exec [comand [argument ...]]
если специфицирован процесс то это команда порождает процесс потомок заменяющий shell, любые специфицированные аргументы передаются потомку.
ВЫПОЛНИТЬ пример exec print 1
6)команда typeset - печать переменных и их атрибутов typeset [+firx] [name[=value]...]
если нет никаких аргументов команда печатает список всех переменных и их атрибутов. Если имена [name] заданы то команда устанавливает атрибуты установленных переменных. Переменным могут быть также назначены значения:
Опции:
-f - список функций;
-i - переменные имеющие целые числовые значения; -r - установить переменную только читаемой;
-x - установить переменную окружения. УПРАЖНЕНИЕ 5:
-повторить установку вашей переменной окружения с помощью команды typeset;
-проверить установку переменной окружения командами export и typeset;
-установить переменные окружения PS1=* и PS2=_
-проверить установку при наборе какой либо управляющей конструкции (например, while).
-востановить прежние значения переменных окружения.
5
6) команда unset - сбрасывает значения и атрибуты именованных параметров и функций.
unset [-f] name...
если специфицирована опция -f тогда сбрасывается имя функции.
УПРАЖНЕНИЕ 6:
-сбросить имя вашей функции;
-проверить результат;
-сбросить значение переменной PS1 - наблюдаемый эффект записать
вотчет;
-установить значение переменной окружения PS1=(ВАШЕ ИМЯ)
7)команда trap - ловушка сигнала trap [action condition ...]
Сигнал есть одна из форм взаимодействия между процессами, при получении сигнала выполняется действие определенное в процессе для данного сигнала.
trap команда приводит к исполнению специфицированного действия. [action] когда случается одно из специфицированных условий. Условием может быть любой сигнал определенный символическим именем. Действие есть просто shell-команда. Если нет аргументов то trap команда печатает список действий связанных с каждым условием.
3.РЕГУЛЯРНЫЕ ВСТРОЕННЫЕ УТИЛИТЫ
Эти утилиты встроены в shell, но в то же время их можно найти среди списка внешних утилит хранящихся на диске. Встроенность позволяет увеличить эффективность системы. К этой группе относятся утилиты cd, false, true рассмотренные
ранее. |
|
|
1)команда kill |
- послать сигнал |
|
kill |
-signame pid... |
|
kill |
-signum |
pid... |
kill |
-l |
|
kill утилита посылает сигнал специфицированный signum или signum к специфицированному процессу (если pid (идентификатор процесса) отрицательное число, то оно специфицируется группу процессов).
В первой форме, signame есть символическое имя сигнала ( с префиксом SIG или без него). Во второй форме, signum есть десятичное число сигнала который должен быть установлен. Если никакой сигнал не специфицирован устанавливается по умолчанию сигнал завершения процесса.
Если -l опция специфицирована, то kill утилита выводит список всех поддерживаемых сигналов.
УПРАЖНЕНИЕ 7:
-проконтролировать список сигналов поддерживаемых встроенной командой kill ;
-то же самое проконтролировать для внешней утилиты kill используя команду use;
-определить по имени сигналы завершения процесса, записать в отчет;
-проконтролировать с помощью внешней команды sin состав активных внешних процессов;
-запустить процесс второй процесс Shell выдав команду sh;
-с помощью внешней команды sin определить pid для процесса,
"Shell" (процесс после загрузки получает имя ksh) записать результат в отчет;
-c помощью команды kill завершить процесс "Shell";
-проконтролировать завершение командой sin.
6
УПРАЖНЕНИЕ 8:
-создать в текущем директории два файла с именами f1 и f2 (например, с помощью команды use используя переадресацию в файл);
-с помощью команды trap установить ловушку на сигнал SGNUSR1 связав его с действием определенной командой ls;
-определить с помощью команды sin pid-номер для shell (после загрузки процесс shell получает имя ksh);
-послать с помощью утилиты kill сигнал SIGUSR1;
-записать в отчет наблюдаемый результат.