![](/img/trans.png)
[英]How to write shell script to login to particular server based on environment
[英]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.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.