Реферат: Интерпретатор командного языка shell

Команда expr применяется для вычисления выражений. Результат выводится на стандартный вывод. Операнды выражения должны быть разделены пробелами. Метасимволы должны быть экранированы. Надо заметить, что 0 возвращается в качестве числа, а не для индикации пустой строки. Строки, содержащие пробелы или другие специальные символы, должны быть заключены в кавычки. Целые рассматриваются как 32-битные числа.

Ниже приведен список операторов в порядке возрастания приоритета, операции с равным приоритетом заключены в фигурные скобки. Перед символами, которые должны быть экранированы, стоит \.

<выр> \| <выр> если первое <выр> не пустое и не нулевое, то возвращает его, иначе возвращает второе <выр>
<выр> \& <выр> если оба <выр> не пустые и не нулевые, то возвращает первое <выр>, иначе возвращает 0
<выр> { =, \>, \>=, \<, \<=, != } <выр> возвращает результат целочисленного сравнения если оба <выр> - целые; иначе возвращает результат лексического сравнения
<выр> { +, - } <выр> сложение и вычитание целочисленных аргументов
<выр> { \*, /, % } <выр> умножение, деление и получение остатка от деления целочисленных аргументов
<выр> : <выр> оператор сопоставления : сопоставляет первый аргумент со вторым, который должен быть регулярным выражением. Обычно оператор сравнения возвращает число символов, удовлетворяющих образцу (0 при неудачном сравнении). Однако символы \( и \) могут применяться для выделения части первого аргумента.

Регулярное выражение строится следующим образом:

. - обозначает любой символ
* - обозначает предыдущий символ, повторенный несколько раз
[] - обозначают любой один из указанных между ними символов; группа символов может обозначаться с помощью знака "-" (т.е. [0-9] эквивалентно [0123456789]); если после [ стоит ^, то это эквивалентно любому символу, кроме указанных в скобках и <возврата_каретки>; для указания ] в качестве образца, надо поставить ее сразу за [ (т.е. []...]); . и * внутри квадратных скобок обозначают самих себя

Все остальные символы (и ^, если стоит не в квадратных скобках) обозначают самих себя. Для указания символов ., *,[ и ] надо экранировать их (т.е. писать \., \*, \[, \]).

Примеры.

1.

a=`expr $a + 1`

- увеличение на 1 переменной a

2.

expr $a : '.*/\(.*\)' \| $a

- выделяет из имени файла короткое имя (т.е. из /usr/util/ena выделяется ena). Внимание, одиночный символ / будет воспринят как знак операции деления.

3.

expr $VAR : '.*'

- получение количества символов переменной VAR.

В качестве побочного эффекта expr возвращает следующие коды завершения:

0 - если выражение не нуль и не пустая строка
1 - если выражение нуль или пустая строка
2 - для некорректных выражений

Команда expr также выдает следующие сообщения об ошибках:

syntax error - для ошибок в операторах или операндах
non-numeric argument - для попыток применения арифметических операций к нечисловым строкам

Замечание.

Допустим, что мы хотим сравнить значение переменной a с каким-либо символом, имеющим для expr особый смысл, например, со знаком равенства. Пусть $a на самом деле является знаком равенства. Так как аргументы предварительно обрабатываются shell'ом, то команда

expr $a = '='

будет воспринята как

expr = = =

что синтаксически некорректно. В подобных случаях надо пользоваться таким приемом:

expr X$a = X=

т.е. добавлением некоторого символа к обеим строкам, что никак не влияет на результат сравнения, однако позволяет избежать синтаксической ошибки.

5.3. Команда ena

Команда ena позволяет получить части полного имени файла. Первый аргумент - флаг, второй - имя файла. Команда различает следующие флаги:

-n - имя файла без расширения
-f - имя файла с расширением
-e - расширение
-d - имя директории
-p - если имя файла начинается с . или .. , то эти символы выделяются из имени

Ниже приводится текст программы ena, хранящийся в /util/ena.

# Get part of pathname

case $1 in

К-во Просмотров: 865
Бесплатно скачать Реферат: Интерпретатор командного языка shell