![](/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.