Bash:比较两个变量中的IP地址

时间:2018-09-23 04:23:17

标签: linux bash awk sed grep

我有两个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

1 个答案:

答案 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是否同时存在,并且每一个都由空格包围。