2015-07-22 50 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}')