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

时间:2015-10-12 10:49:46

标签: linux shell

我正在尝试运行一个在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

请帮助......

1 个答案:

答案 0 :(得分:0)

我会使用不同的工具来解析文件,而且我也避免使用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中,就像您尝试一样。

接下来,我们检查给定的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&#34;行#34;原样。