簡體   English   中英

如何驗證IP是否由特定服務器使用或不使用Shell腳本?

[英]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.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打印的值存儲在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM