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

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

Внимание!

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

Обозначения AND, OR и NOT не используются.

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

func_name() | COMPARE |
(BOOL_EXPR) | !BOOL_EXPR |
BOOL_EXPR && BOOL_EXPR |
BOOL_EXPR || BOOL_EXPR

Где func_name() – вызов функции с именем func_name, а COMPARE – одна из перечисленных ниже операций сравнения. Функция должна быть определена заранее в секции [def].

Используемые обозначения при определении операций сравнения 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 читается при обработке конфигурационного файла, соответственно, при изменении содержимого файла со значениями или пути к нему необходимо заставить drweb-icapd перечитать конфигурацию, например, послав ему сигнал SIGHUP.