Скачиваний:
0
Добавлен:
07.08.2024
Размер:
352.22 Кб
Скачать

1

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 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;

-записать в отчет наблюдаемый результат.

Соседние файлы в папке Лабораторные работы