使用bash在Ubuntu或Debian上获取IP地址信息(网关和子网)

Mik*_*sen 1 regex linux bash ubuntu awk

我试图使用bash在Debian和Ubuntu系统上获取以太网或wifi适配器的IP地址.我可以使用ifconfig可靠地获取它,但它需要安装net-tools,现在已弃用但它确实有效.

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

我使用ip route做了一些东西,但它不能一致地工作,有时输出的行根据发行版和版本而不同

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

有没有办法使用正则表达式grep或awk以确保它有效?

D.K*_*.K. 5

你可以这样做:

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

对于子网,您可以:

SUBNET=$(ip route | grep "src $MAINIP" | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)

而对于GW:

GATEWAYIP=$(ip route show | grep default | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)

  • `ip addr` 是最不受欢迎的 Linux 网络命令之一。`ifconfig` 是人们遇到的第一件事,很少有人会寻找其他东西。 (2认同)