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

标签 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

请帮忙......

最佳答案

我会使用不同的工具来解析文件,而且我会避免使用 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

关于linux - 如何使用 Shell 脚本验证 IP 是否被特定服务器使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33079259/

相关文章:

linux - 使用shell脚本获取网络中的图像列表

windows - 您使用什么工具在 Linux 上开发 Windows 移动应用程序?

shell - if [ "x"!= x ] 在 bash 中会怎样?

json - 在 jq 中,选择可以是可选的(即,如果没有找到 - 不要过滤掉该元素)

windows - 如何在 Windows 中为 npm run-scripts 设置 shell

bash - 别名和导出(和函数!)[BASH] 之间有什么区别?

linux - 我应该如何计算每个文件中的重复行?

c++ - 如何检查哪个#define 被编译成二进制文件?

linux - vfs_rename(...) 所需的锁