Логические выражения

На главную  Назад  Вперед

Логические выражения – это операции сравнения и вызова макросов, объединенные логическими операторами && («логическое И», «AND»), || («логическое ИЛИ», «OR»), ! («логическое отрицание», «NOT»). Для группировки операций и изменения их приоритета могут использоваться скобки.

Внимание!

Логические операции задаются только при помощи операторов &&, || и !. Обозначения AND, OR и NOT не используются.

Синтаксис логических выражений BOOL_EXPR:

macro_name() | COMPARE |
(BOOL_EXPR) | !BOOL_EXPR |
BOOL_EXPR && BOOL_EXPR |
BOOL_EXPR || BOOL_EXPR

Где macro_name() – вызов макроса с именем macro_name, а COMPARE – одна из перечисленных ниже операций сравнения. Используемый макрос должен быть определен заранее в секции Определения.

Используемые обозначения при определении операций сравнения COMPARE:

Обозначение

Комментарий

string_var

cidr_var

time_var

Параметр соответствующего типа (STRING, CIDR или TIME)

TIME

Строка в формате "ЧЧ:MM" или "Ч:MM" (часы, минуты), в кавычках

STRING

Произвольная строка в кавычках

REGEX

Регулярное выражение формата POSIX extended, в кавычках

FILE_NAME

Путь к файлу, в кавычках

CIDR

IPv4-адрес в кавычках (возможно, с префиксом сети, указанным через слеш). Если префикс сети не указан, то подразумевается /32.  Пустая строка "" означает специальное значение undefined

Поддерживаемые операции сравнения для переменных типа string:

Операция

Комментарий

string_var == STRING

Переменная совпадает со строкой

string_var != STRING

Переменная не совпадает со строкой

string_var ~ REGEX

Переменная содержит подстроку, которая проверяется на совпадение с регулярным выражением (используется метод search)

string_var == file:FILE_NAME

Переменная совпадает хотя бы с одной строкой из указанного файла

string_var ~ file:FILE_NAME

Переменная соответствует хотя бы одному регулярному выражению из указанного файла

Операции == и ~ для строк регистронезависимы.

Поддерживаемые операции сравнения для переменных типа cidr:

Операция

Комментарий

cidr_var <<= CIDR

IP-адрес входит в сеть указанного диапазона

cidr_var <<= file:FILE_NAME

IP-адрес входит хотя бы в одну из сетей, перечисленных в указанном файле

Если для операции <<= оба аргумента имеют значение undefined, то результатом операции считается true. Если же только один из аргументов имеет значение undefined, то результат этой операции – false.

Поддерживаемые операции сравнения для переменных типа time:

Операция

Комментарий

time_var >  TIME

time_var >= TIME

time_var <  TIME

time_var <= TIME

Сравнение времени

Каждая операция сравнения имеет определенный приоритет относительно других операций. В порядке убывания приоритета операции сравнения распределяются следующим образом:

1.! («логическое НЕ», «NOT»)

2.< («меньше»), <= («меньше или равно»), > («больше»), >= («больше или равно»)

3.== («совпадает»), != («не совпадает»), ~ («соответствует»), <<= («входит в группу»)

4.&& («логическое И», «AND»)

5.|| («логическое ИЛИ», «OR»)

Операции, перечисленные в одной строке, имеют одинаковый приоритет и вычисляются слева направо.

Для некоторых операций возможно чтение массива значений из файла (с указанием префикса file:). Строки, начинающиеся с символов «#» или «;», а также пустые строки пропускаются при чтении значений.

Внимание!

Содержимое файла file:FILE_NAME читается при обработке конфигурационного файла. Соответственно, при изменении содержимого файла со значениями или пути к нему необходимо перечитать конфигурацию Dr.Web ICAPD, например, послав ему сигнал SIGHUP.