2015-07-22 87 views
1

我想要使用bash在Debian和Ubuntu系統上獲取以太網或WiFi適配器的IP地址。我可以使用ifconfig可靠地得到它,但它需要安裝net-tools,現在已經被棄用,但它確實有效。使用bash在Ubuntu或Debian上獲取IP地址信息(網關和子網)

showip=$(ifconfig eth0 | awk -F"[: ]+" '/inet addr:/ {print $4}') 

我做了一些使用IP路由,但它不工作始終,有時輸出線都不同,這取決於發行和版本

MAINIP=$(ip route | awk 'NR==3{print $9}') 
GATEWAYIP=$(ip route | awk 'NR==1{print $3}') 
SUBNET=$(ip route | awk 'NR==2{print $1}') 

有沒有辦法到grep或使用AWK正則表達式以確保其正常工作?

回答

5

你可以這樣做:

MAINIP=$(ip addr show dev eth0 | grep "inet" | awk 'NR==1{print $2}' | cut -d'/' -f 1) 

子網然後,您可以:

​​

而對於GW:

GATEWAYIP=$(ip route show | grep default | awk '{print $3}') 
+1

'IP addr'是至少理解Linux網絡命令之一。 'ifconfig'是人們碰到的第一件事,而其他人則很少。 – chicks

+0

感謝您爲IP工作,得到了網關和子網的想法? –

+0

更新以包括wifi以及因爲這是什麼IP路線我會相信。 –

0

想通了其適用於無線連接,而不僅僅是eth0(謝謝@DK),唯一的調整是MAINIP。可能有更好的方法或者我忽略的東西。

MAINIP=$(ip route | grep src | awk '{print $9}') 
GATEWAYIP=$(ip route | grep default | awk '{print $3}') 
SUBNET=$(ip route | grep proto | grep -v default | awk '{print $1}') 

SUBNET沒有雙重的grep

SUBNET=$(ip route | awk '/proto/ && !/default/ {print $1}')