内置函数由样书中的表达式使用。
例如,您可以使用内置函数 str()
将数字转换为字符串。
str($parameters.order)
或者,您可以使用内置函数 int()
将字符串转换为整数。
int($parameters.优先级)
以下是样书表达式中支持的内置函数列表及其使用方法的示例:
str()
函数将输入参数转换为字符串值。
允许的参数类型:
细绳
数字
TCP端口
布尔值
IP 地址
示例:
"set-" + str(10)
函数返回 "set-10"
。str(10)
函数返回 10
。str(1.1.1.1)
函数返回 1.1.1.1
。str(T rue)
函数返回 "T rue"
。str(ADM)
函数返回 "mas"
。int()
函数以字符串、数字、IP 地址或 tcpport
作为参数并返回一个整数。
示例:
int("10")
函数返回 10
。int(10)
函数返回 10
。int(ip('0.0.4.1'))
函数返回 1025
。bool()
函数接受任何类型作为参数。 如果参数值为 false
、空或不存在,则此函数返回 false
。
否则,它返回 true
。
示例:
bool(true)
函数返回 true
。bool(false)
函数返回 false
。$parameters.a
为 false
、为空或不存在,则 bool($parameters.a)
函数返回 false
。len()
函数以字符串或列表作为参数,并返回字符串中的字符数或列表中的项目数。
示例 1:
如果您定义替换如下:
项目:[“123”,“abc”,“xyz”]
len($substitutions.items)
函数返回 3
示例 2:
len("NetScaler Console")
函数返回 10
。
示例 3:
如果 $parameters.vips
具有值 ['1.1.1.1', '1.1.1.2', '1.1.1.3']
,则 len($parameters.vips)
函数返回 3
。
min()
函数以列表或一系列数字或 tcp-ports
作为参数,并返回最小项。
带有一系列数字/tcp 端口的示例:
min(80, 100, 1000)
函数返回 80
。min(-20, 100, 400)
函数返回 -20
。min(-80, -20, -10)
函数返回 -80
。min(0, 100, -400)
函数返回 -400
。带有数字/tcp 端口列表的示例:
支持 $parameters.ports
是 tcp-ports
的列表,其值有: [80, 81, 8080]
。
min($parameters.ports)
函数返回 80
。
max()
函数以列表或一系列数字或 tcp-ports
作为参数,并返回其中最大的项。
带有一系列数字/tcp 端口的示例:
max(80, 100, 1000)
函数返回 1000
。max(-20, 100, 400)
函数返回 400
。max(-80, -20, -10)
函数返回 -10
。max(0, 100, -400)
函数返回 100
。带有数字/tcp 端口列表的示例:
支持 $parameters.ports
是 tcp-ports
的列表,并且具有以下值: [80, 81, 8080]
。
max($parameters.ports)
函数返回 8080
。
bin()
函数以数字作为参数,并返回以二进制格式表示该数字的字符串。
表达式示例:
bin(100)
函数返回 0b1100100
。
oct()
函数以数字作为参数,并返回以八进制格式表示该数字的字符串。
表达式示例:
oct(100)
函数返回 0144
。
hex()
函数以数字作为参数,并返回以十六进制格式表示该数字的小写字符串。
表达式示例:
hex(100)
函数返回 0x64
。
lower()
函数以字符串作为参数,并返回小写的相同字符串。
示例:
lower("ADM")
函数返回 adm
。
upper()
函数接受一个字符串作为参数,并以大写形式返回相同的字符串。
示例:
upper("NetScaler Console")
函数返回 NetScaler Console
。
sum()
函数以数字列表或 tcpports
作为参数,并返回列表中数字的总和。
示例 1:
如果您定义替换如下: 替换:
数字列表 = [11, 22, 55]
sum($substitutions.list-of-numbers)
函数返回 88
。
示例 2:
如果 $parameters.ports
是 [80, 81, 82]
,则 sum($parameters.ports)
函数返回 243
。
pow()
函数接受两个数字作为参数,并返回一个数字,该数字表示第一个参数的第二个参数的幂。
示例:
pow(3,2)
函数返回 9
。
ip()
函数以整数、字符串或 IP 地址作为参数,并根据输入值返回 IP 地址。
示例:
在 ip
函数中指定一个 IP 地址:
ip(3.1.1.1)
函数返回 3.1.1.1
。
在 ip
函数中指定一个字符串:
ip('2.1.1.1')
函数返回 2.1.1.1
在 ip
函数中指定一个整数:
ip(12)
函数返回 0.0.0.12
。
当您在 ip
函数中将整数指定为字符串时,它会返回输入的等效 IP 地址。
ip('1025')
函数返回 0.0.4.1
。
该函数还支持整数加减运算并返回结果IP地址。
加法: ip(1025) + ip(12)
函数返回 0.0.4.13
。
减法: ip('1025') - ip(12)
函数返回 0.0.3.245
。
结合加法和减法: ip('1.1.1.1') + ip('1.1.1.1') – ip(2)
返回 2.2.2.0
。
base64.encode()
函数接受一个字符串参数并返回 base64 编码的字符串。
示例:
base64.encode("abcd")
函数返回 YWJjZA==
。
base64.decode
函数以 base64 编码的字符串作为参数并返回解码后的字符串。
示例:
base64.decode("YWJjZA==")
函数返回 abcd
。
exist()
函数接受任何类型的参数并返回布尔值。 如果输入有任何值,则返回值为 True
。 如果输入参数没有值(即没有值),则返回值为 False
。
考虑到 $parameters.monitor
是一个可选参数。 如果在创建配置包时为此参数提供一个值,则存在 ($parameters.monitor)
函数返回 True
。
否则,它返回 False
。
filter()
函数接受两个参数。
参数 1:接受一个参数并返回布尔值的替代函数。
参数 2:列表。
该函数返回原始列表的一个子集,其中当传递给第一个 参数中的替换函数时,每个元素的计算结果为 True
。
示例:
考虑如下替代函数:
替换:
x(a): $a != 81
如果输入值不等于 81
,则此函数返回 True 。 否则,它返回 False
。
假设,$parameters.ports
是 [81, 80, 81, 89]
。
过滤器($substitutions.x, $parameters.ports)
通过从列表中删除所有出现的 81
返回 [80, 89]
。
函数 if-then-else()
接受三个参数。
参数 1:布尔表达式
参数 2:任何表达式
参数 3:任何表达式(可选)
如果参数 1 中的表达式计算结果为 True
,则函数返回作为参数 2 提供的表达式的值。
否则,如果提供了参数 3,则该函数返回参数 3 中表达式的值。
如果未提供参数 3,则函数返回 而不是
。
示例 1:
如果 $parameters.servicetype
的值为 HTTP
,则 if-then-else($parameters.servicetype == HTTP, 80, 443)
函数返回 80
。 否则,该函数返回 443
。
示例 2:
如果 $parameters.servicetype
具有值 HTTP
,则 if-then-else($parameters.servicetype == HTTP, $parameters.hport, $parameters.sport)
函数返回 $parameters.hport
的值。
否则,该函数返回 $parameters.sport
的值。
示例 3:
如果 $parameters.servicetype
的值为 HTTP
,则 if-then-else($parameters.servicetype == HTTP, 80)
返回 80
。
否则,该函数不会返回任何值。
join()
函数接受两个参数:
参数 1:数字列表、 tcp-ports
、字符串或 IP 地址
参数 2:分隔符字符串(可选)
此函数将作为参数 1 提供的列表的元素连接成一个字符串,其中每个元素由作为参数 2 提供的分隔符字符串分隔。 如果没有提供参数 2,则列表中的元素将连接为一个字符串。
示例:
$parameters.ports
是 [81, 82, 83]
.
使用分隔符参数:
join($parameters.ports, '-')
函数返回 81-82-83
。
没有分隔符参数:
join($parameters.ports)
函数返回 818283
。
split()
函数根据指定的分隔符将输入字符串拆分为多个列表。 如果没有指定分隔符或者指定为空白(''
),则此函数将空格视为分隔符并将字符串拆分为列表。
例子:
split('Example_string_split', 's')
函数返回 ['Example_','tring_','plit']
。
split('Example string split')
函数返回 ['Example','string','split']
。
split('Example string split', '')
函数返回 ['Example','string','split']
。
split('Example string')
函数返回 ['Example','string']
。
此函数将连续的空间视为一个空间。
map()
函数接受两个参数;
参数 1:任何函数
参数 2:元素列表。
该函数返回一个列表,其中列表中的每个元素都是将 map()
函数(参数 1)应用于参数 2 中相应元素的结果。
参数 1 中允许的函数:
接受一个参数的内置函数:
base64.encode、base64.decode、bin、bool、exists、hex、int、ip、len、lower、upper、oct、quotewrap、str、trim、upper、url.encode、url.decode
至少接受一个参数的替换函数。
示例:
假设 $parameters.nums 是 [81, 82, 83]
。
使用内置函数 str 进行映射
map(str, $parameters.nums)
函数返回 ["81", "82", "83"]
map 函数的结果是字符串列表,其中每个元素都是字符串,通过对输入列表中的相应元素应用 str 函数来计算($parameters.nums)。
使用替代函数的映射
替换:
添加-10(端口): $port + 10
表达:
map($substitutions.add-10, $parameters.nums)
函数返回一个数字列表: [ 91, 92, 93 ]
这个 map 函数的结果是一个数字列表。 每个元素都是通过对输入列表 ($parameters.nums)
中的相应元素应用替换函数 $substitutions.add-10
来计算的。
quotewrap()
函数以字符串作为参数,并在输入值前后添加双引号字符后返回字符串。
示例:
quotewrap("ADM")
函数返回 "mas"
replace()
函数接受三个参数:
参数 1: 字符串
或以下内置类型的列表:
细绳
数字
IP地址
TCP端口
布尔值
参数 2:单个值或值列表,其类型与参数 1 中指定的类型匹配
参数 3:与参数 1 中指定的类型相同的单个值(可选)
replace()
函数将参数 1 中所有出现的参数 2 替换为参数 3。
如果未提供参数 3,则所有出现的参数 2 都会从参数 1 中删除。
示例:
replace('abcdef', 'def', 'xyz')
函数返回 abcxyz
。
所有出现的 def
都被替换为 xyz
。
replace('abcdefabc', 'def')
返回 abcabc
。
由于没有参数 3, def
从结果字符串中删除。
replace('An#example@to%replace!characters', ['@', '#', '!', '%'], '_')
函数返回 An_example_to_replace_characters
。
输出字符串有下划线(_)而不是 ['@', '#', '!', '%']
中指定的字符。
replace([10.10.10.1, 10.10.10.2, 10.10.10.3, 10.10.10.4], [10.10.10.2, 10.10.10.4])
函数返回 [10.10.10.1, 10.10.10.3]
。
由于没有参数 3, 10.10.10.2
和 10.10.10.4
从结果 IP 地址列表中删除。
replace([8080, 8081, 8082, 8083, 8084], 8083, 80)
函数返回 [8080, 8081, 8082, 80, 8084]
。
所有出现的 8083
都被替换为 80
。
trim()
函数返回一个字符串,其中输入字符串的前导和尾随空格已被删除。
示例:
trim(' abc ')
函数返回 abc
。
truncate()
函数接受两个参数:
参数 1:字符串
参数 2:数字
该函数返回一个字符串,其中参数 1 中的输入字符串被截断为参数 2 指定的长度。
示例:
truncate('NetScaler Console', 6)
返回 Citrix
。
distinct()
函数从列表输入中提取唯一的项目。
示例: 如果 $parameters.input_list
是 ['ADM', 'ADC', 'VPX', 'ADC', 'ADM', 'CPX']
,则 distinct($parameters.input_list)
函数返回 ['ADM', 'ADC', 'VPX', 'CPX']
。
url.encode()
函数返回一个字符串,其中的字符使用符合 RFC 3986 的 ASCII 字符集进行转换。
示例:
url.encode("a/b/c")
函数返回 a%2Fb%2Fc
。
url.decode()
函数返回一个字符串,其中 URL 编码参数根据 RFC 3986 解码为常规字符串。
示例:
url.decode("a%2Fb%2Fc")
函数返回 a/b/c
。
is-ipv4()
函数以 IP 地址作为参数,如果 IP 地址是 IPv4 格式,则返回布尔值 True
。
is-ipv4(10.10.10.10)
函数返回 True
is-ipv6()
函数以 IP 地址作为参数,如果 IP 地址是 IPv6 格式,则返回布尔值 True
。
is-ipv6(2001:DB8::)
函数返回 True
startswith()
函数判断字符串是否以给定的前缀开头。 此函数需要两个强制字符串参数。
以(str,sub_str)开头
当字符串(str
)以子字符串(sub_str
)开头时,此函数返回 True
。
示例:
startswith('Citrix', 'Ci')
函数返回 True
。startswith('Citrix', 'iC')
函数返回 False
startswith('Citrix', 'Ab')
函数返回 False
endswith()
函数确定字符串是否以给定的后缀结尾。 此函数需要两个强制字符串参数。
以(str,sub_str)结尾
当字符串(str
)以子字符串(sub_str
)结尾时,此函数返回 True
。
示例:
endswith('Citrix', 'ix')
函数返回 True
。endswith('Citrix', 'Ix')
函数返回 False
。endswith('Citrix', 'ab')
函数返回 False
。contains()
函数判断字符串是否包含给定的子字符串。 此函数需要两个强制字符串参数。
包含(str,sub_str)
当子字符串(sub_str
)包含在字符串(str
)内的任何位置时,此函数返回 True
。
例子:
contains('Citrix', 'tri')
函数返回 True
。contains('Citrix', 'Ci')
函数返回 True
。contains('Citrix', 'ti')
函数返回 False
使用 substring()
函数从字符串中提取子字符串。
子字符串(字符串,起始索引,结束索引)
此函数需要两个强制参数和一个可选整数参数。
str
(强制)start_index
(强制)end_index
(可选)此函数返回位于指定索引位置之间的字符串(str
)的子字符串。 如果不指定结束索引位置,则该函数将从起始索引到字符串末尾提取子字符串。
笔记
当您指定
end_index
时,子字符串将排除end_index
位置处的字符。
例子:
substring('Citrix', 2)
函数返回 trix
substring('Citrix', 10)
函数返回 ("
)
在这个例子中,函数返回一个空白字符串,因为它有一个无效的 start_index
位置。
substring('Citrix', 2, 4)
函数返回 tr
在此示例中,该函数提取 2 到 4 个索引位置之间的字符。
substring('Citrix', -3)
函数返回 rix
如果要提取字符串末尾的字符,请为 start_index
参数指定负值。
在此示例中,该函数提取包含字符串中最后三个字符的子字符串。
multiple()
函数接受两个参数:
参数 1: 数字
、 字符串
、 布尔值
、 ipaddress
、 tcp-port
或 密码
参数 2:一个 数字
multiple(argument1, argument2)
函数返回包含参数 1 的多个副本的列表。 副本数量等于传递给参数 2 的数量。
示例:
multiple(10.10.10.10, 3)
函数返回 [10.10.10.10, 10.10.10.10, 10.10.10.10]
。
multiple(8080, 4)
函数返回 [8080, 8080, 8080]
。
reverse() 函数以项目列表作为参数,并返回具有相同项目但以相反顺序列出的列表。
参数可以是以下内置类型的列表:
细绳
数字
IP地址
IP网络
TCP端口
布尔值
密码
目的
文件
证书文件
密钥文件
证书密钥
示例: