我有两个bash变量
$checkVar = 10.10.10.111 10.10.10.112 10.10.10.117
$Server = 10.10.10.114 10.10.10.112 10.10.10.113 10.10.10.111
如果PASS
中仅存在$checkVar
中的前两个值,我想以$Server
进行测试
在上面的示例中,测试应该PASS
,因为$checkVar
10.10.10.111 10.10.10.112
中的前两个值出现在$Server
我写了下面的逻辑,但是没有用
if [[ ${checkVar%%,*} = *"$Server"* ]]; then
test=pass
else
test=fail
fi
答案 0 :(得分:1)
在您的if
语句中,${checkVar%%,*}
返回带有逗号的值$checkVar
,并且删除了尾随字符,这可能不是您想要的,因为$checkVar
并不完全不包含逗号。
此外,*"$Server"*
表达式仅返回在开头和结尾位置$Server
后面附加有文字星号的字符串,而不扩展任何内容。您将看到这些表达式的比较没有意义。
尝试类似以下内容:
#!/bin/bash
checkVar="10.10.10.111 10.10.10.112 10.10.10.117"
Server="10.10.10.114 10.10.10.112 10.10.10.113 10.10.10.111"
set -- $checkVar
if [[ " $Server " =~ [[:blank:]]$1[[:blank:]] && " $Server " =~ [[:blank:]]$2[[:blank:]] ]]; then
test=pass
else
test=fail
fi
echo "$test"
其中$ 1持有$ checkVar中的第一个值,而$ 2持有第二个值。
在if
语句中,正则表达式测试$ 1和$ 2是否同时存在,并且每一个都由空格包围。