繁体   English   中英

如何验证IP是否由特定服务器使用或不使用Shell脚本?

[英]How to verifiy if IP is used by particular server or not using Shell script?

我正在尝试运行在grep状态失败的Shell脚本,以下是我正在运行的脚本

activeIP=`grep -Po '(?<=active.server.ip=).*' /etc/active.properties`

command="ifconfig | grep "$activeIP

eval "$command"

if [ $? == 0 ]; then
    echo"You are on Active"
else
    echo"You are not on Active"
fi

active.properties文件内容:

active.server.ip=10.25.15.1
standby.server.ip=10.25.15.2

请帮忙......

我将使用其他工具来解析文件,并且我也避免使用eval因为这样做很容易出错。 因此,使用awk ,并假设您正在使用bash我会这样做:

activeIP=$(awk -F= '$1 == "active.server.ip" {print $2}' /etc/active.properties)
if ip addr show | grep -qw "$activeIP"; then
    echo "You are on Active"
else
    echo "You are not on Active"
fi

说明:

首先,我们使用awk-F=对分割字段= 然后,如果第一个字段等于active.server.ip我们将打印第二个字段。 请注意,如果您在=周围有/允许空白,则需要稍作更改。 就像您尝试的那样,我们activeIP打印的值存储在activeIP中。

接下来,我们检查给定的IP是否显示在当前IP列表中。 ip命令是ifconfig的较新版本,因此我换成了。 无需构建字符串并进行eval ,因为bash在执行命令时已经进行了变量替换。

我们将使用grep来检查ip addr show命令的输出,并添加-w以匹配单词,因此,如果我们的IP是另一个IP的子字符串,则它将不匹配(例如,字符串192.168.114.3将与IP 192.168.114.37不匹配)。 另外,由于我们实际上并不关心匹配的行,因此我添加了-q使其安静运行。

最后, if已经查看退出状态,那么我们不必对$?做显式测试$?

作为另一个可能的减少步骤,我们实际上可以跳过将IP存储在变量中,然后让bash像这样为我们做进程替换:

if ip addr show | grep -qw $(awk -F= '$1 == "active.server.ip" {print $2}' /etc/active.properties); then
    echo "You are on Active"
else
    echo "You are not on Active"
fi

因此,它将按原样执行awk

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM