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