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

1

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 3

Операционная система QNX

Программирование сценариев для интерпретатора shell

Цель работы. Получить навыки управления потоком команд.

1.ЭЛЕМЕНТЫ ЯЗЫКА SHELL

1)Переменная Переменная вводится операцией присваивания, которая имеет вид

name=value

Операция присваивает переменной name последовательность символовопределенных значением value. В языке нет понятия типа, переменные могут иметь только символьные значения. Значение value может быть пустым. Подстановка значения (расширение переменной ) происходит только тогдакогда переменная используется с префиксом $ или в форме ${name}. Если для переменной задается значение, содержащее пробелы, то его нужно заключить в кавычки (одинарные или двойные)

УПРАЖНЕНИЕ 1. Выполнить

var=abcd xy=$var+4 xyz=${xy}4 var2=’ab c de’ y=$var2-5

print $var $xy $xyz $y

В отчет записать результаты. Вместо команды print в равной мере можно использовать команду echo.

2)Параметры

Параметры это некоторые объекты имеющие значение. QNX shell поддерживает три вида параметров:

-позиционные параметры;

-специальные параметры;

-именованные переменные (переменные, рассмотренные в п.п.1))

Позиционные параметры - это все параметры, специфицированные в командной строке shell и получающие значения при запуске shell. Позиционные параметры обозначаются комбинацией символа $ и числа 0-9 т.е. $1- означает первый

параметр; $2 - означает второй параметр,и.т.д.\

также

назначены командой

Позиционные

параметры

могут

быть

set(встроенная команда shell).

 

 

 

 

 

 

Специальные

параметры

обеспечивают

общедоступный

сервис

при

программировании

shell сценариев.

Используются следующие виды специальных

параметров:

-

последовательность

значений всех позиционных параметров,

$@

начиная с

первого, если расширение

параметров происходит внутри строки в

кавычках эта последовательность рассматривается как множество операндов; $* - последовательность значений всех позиционных параметров,

начиная с первого, если расширение параметров происходит внутри строки в кавычках эта последовательность рассматривается как один операнд;

$# - число позиционных параметров; $? - выходной статус последней исполненной команды (0 –нормальное

завершение);

$$ - идентификатор процесса введенного shell;

$! - идентификатор процесса выполняющего последнею асинхронную

команду;

$0 - имя shell сценария (или интерпретатора shell).

2

set команда

set [option] [-o option name] ... [argument ...] set [option] [+o option name] ... [argument ...] set --

set команда устанавливает и сбрасывает значения позиционных параметров определенных полями argument. Вариант set-- сбрасывает значения всех позиционных параметров. Кроме того команда позволяет установить (-о) или сбросить (+о) некоторые режимы работы интерпретатора shell. в частности

команда может быть использована для отладки shell сценариев:

 

их

-o

noexec - позволяет читать команды из файла сценария без

выполнения.

команд

на стандартное

-o

xtrace - разрешает трассировку исполняемых

устройство вывода.

option

ключи -n

и -x

Те

же режимы можно установить, задавая в поле

соответственно. УПРАЖНЕНИЕ 1.

Выполнить и записать в отчет результаты по следующим командам: set --

print $# set a b c print $# print $@ $* print $0 print $? print $$

ls abc print $?

2.ГРАМАТИКА ЯЗЫКА SHELL

Единицей действия в языке является команда. Различаются одиночные команды, списки команд, конвейеры, составные команды, управляющие конструкции. Если специально не оговаривается, значением команды служит выходной статус (код завершения) последней выполненной команды.

ОДИНОЧНЫЕ КОМАНДЫ.

Это любая внешняя или встроенная команда или операция присваивания за которой следует необязательная переадресация ввода/вывода.

КОНВЕЙЕРЫ КОМАНД.

команд

соединенных

управляющей

операцией

Последовательность

"|",образует конвейер.

Стандартный

выход каждой

команды конвейера, кроме

последней, направляется в стандартный ввод следующей команды. ВЫПОЛНИТЬ:

use ls|wc use cp|wc

Прокомментируйте результат в отчете.

СПИСКИ КОМАНД.

Один или несколько конвейеров соединенных управляющими операциями ";" "&" "&&" "||" образуют список команд. Функции операций:

;- последовательное выполнение конвейеров;

&- асинхронное выполнение; оба конвейера выполняются асинхронно не дожидаясь завершения друг друга;

&&- конвейер стоящий после "&&" выполняется только в том случае, если

предшествующий конвейер вырабатывает

нулевое значение статуса("истина");

|| - конвейер стоящий после "||" выполняется только в том случае,

если

конвейер стоящий до "||", вырабатывает

ненулевое значения статуса

("ложь").

ВЫПОЛНИТЬ:

 

 

3

true || use clock false || use clock false && use clock

Прокомментируйте результат в отчете.

СОСТАВНЫЕ КОМАНДЫ.

Список команд выделенный скобками () или {} называется составной командой.

(list) - выполняет список команд list с помощью вновь порожденного процесса интерпретатора (subshell);

{list;} - выполняет список команд в текущем процессе интерпретатора. Символ ";" может заменяться переводом строки.

Управляющие конструкции.

Сюда относиться конструкции case, while, until, for, if. ВЫПОЛНИТЬ:

cd ..;ls;ls|wc -l

Прокомментируйте результат в отчете.

КОМАНДНЫЕ ПОДСТАНОВКИ.

Командные подстановки позволяют вместо команды подставить выходное сообщение данной команды; имя команды заключается в круглые скобки которым предшествует символ "$":

$(command)

ВЫПОЛНИТЬ: print $(date) print $(ls)

B отчет записать результат.

МАНИПУЛЯЦИЯ С ИМЕНАМИ ФАЙЛОВ.

Для манипуляции с именами файлов используют три символа "*" "?" []. Если один или несколько из этих символов используется в командной строке, каждое слово содержащее символ трактуется как шаблон который заменяется набором имен включающих данный образ.

*- заменяет любую символьную строку;

?- заменяет один символ в строке;

[...] заменяет один символ который находиться в лексическом интервале указанном в скобках.

Пример, [a-c] - один символ заменяется каждым символом из интервала a-

c;

Вариантом данной конструкции является использования функции дополнения

"!".

Пример [!abc] - один символ заменяется всеми символами за исключением a

b c.

ВЫПОЛНИТЬ:

cd /home/g(номер вашей группы)

cp /bin/[a-e]* /home/g(номер вашей группы) ls

rm d[!i]*; ls rm e?; ls

Прокомментировать результаты в отчете. Переписанные файлы не удалять.

3.ВСПОМОГАТЕЛЬНЫЕ КОМАНДЫ КОМАНДА test.

test expression [expression]

test команда вычисляет выражение и возвращает нулевой статус если "истина" и ненулевой статус если "ложь". Эта команда обычно используется в управляющих конструкциях if, while.

4

Следующие выражения допустимы (выборочно):

-r file - файл существует и доступен по чтению; -w file - файл существует и доступен по записи;

-x file - файл существует и доступен по исполнению; -f file - файл есть регулярный файл;

-d file - файл есть директорий;

file1 -ot file2 - файл1 старше чем файл2; string - строка не пустая;

string1 = string2 - строка1 равна строке2; string1 != string2 - строка2 не равна строке2;

num1 -eq num2 -

число1 равно числу2;

num1 -ne num2 -

число1 не равно числу2;

num1 -ge num2 -

число1

больше или равно числу2;

num1 -gt num2 -

число1

больше числа2;

num1 -le num2 - число1

меньше или равно числу2;

num1 -lt num2 -

число1

меньше числа2

Возможны также комбинации выражений связанные логическими операциями:

expr -o expr -

логическое "ИЛИ";

expr -a expr -

логическое

"И";

!expr

-

логическое

отрицание;

(expr)

-

группировка.

УПРАЖНЕНИЕ 2:

Выполнить и записать в отчет результаты выполнения следующих команд: test 3 -gt 2 && use ls

test 3 -lt 2 && use ls test 3 -lt 2 || use ls test ab3 = ab2 || use ls test ab3 != ab2 || use ls

составить и проверить пример для условия -r file.

КОМАНДА read.

read [-r] var...

Команда read читает строку из стандартного устройства ввода (консоли), строка состоит из нескольких слов разделенных допустимыми разделителями. Первое слово назначается к переменной var, второе слово ко второй переменной var и так далее. Если специфицирована опция -r то символ "\" трактуется, как и любой другой символ, в противном случае он считается escape-символом.

ВЫПОЛНИТЬ:

read r t y 1 2 3 4

print $r $t $y print $y

Результаты прокомментировать в отчете.

Переменные в интерпретаторе shell имеют строковый тип, но есть средство (команда expr) позволяющее выполнять арифметические операции над текстовыми переменными, заданными в виде целых чисел.

ВЫПОЛНИТЬ: use expr x=50

y=40

a=$(expr $x + $y); print $a a=$(expr $x / $y); print $a a=$(expr $x - $y); print $a a=$(expr $x ‘*’ $y); print $a

Результаты прокомментировать в отчете.

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