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 - 如何撤销对信号量最近一次操作的SEM_UNDO?

c++ - 更改应用程序文件的名称(.C 文件)

git - 如何使 "nohup ./script.sh & disown"在 post-receive git hook 中工作?

linux - Linux 中的恢复脚本

Shell 脚本 - 使用 bin/echo 而不是 echo 的原因?

linux - 如何获取我从 shell 脚本执行的命令列表的 PID

linux - 使用 usbserial 通过 RxTx 写入数据?

检查另一个程序是否打开了文件

php - 如何从 PHP 脚本运行 linux 命令

python - 用于包装嘈杂的 python 脚本并使用 sed 删除特定行的 shell 命令问题