This question already has answers here:
Comparing two IP Addresses in Bash
                                
                                    (2个答案)
                                
                        
                                2年前关闭。
            
                    
我有两个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

最佳答案

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

关于linux - Bash:比较两个变量中的IP地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52462972/

10-12 04:11