rok*_*rok 8 networking scripting ubuntu bash linux-networking
在 Ubuntu 16.04 中,我编写了一个脚本来根据某些参数动态配置有线以太网接口的 IP 地址。现在的问题是,在我的脚本中,我假设名称是 eth0,但这并不总是正确的。检索它的名字(只是有线的)?
使用ifconfig命令我得到:
enp7s0 Link encap:Ethernet HWaddr fc:3f:db:a2:6d:46
inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::149f:3103:af2f:1ec5/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6784 errors:0 dropped:0 overruns:0 frame:0
TX packets:7493 errors:1 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4565079 (4.5 MB) TX bytes:827825 (827.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8037 errors:0 dropped:0 overruns:0 frame:0
TX packets:8037 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:2261250 (2.2 MB) TX bytes:2261250 (2.2 MB)
wlp19s0 Link encap:Ethernet HWaddr c8:ff:28:93:26:32
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:180463 errors:0 dropped:0 overruns:0 frame:0
TX packets:121275 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:229823414 (229.8 MB) TX bytes:15675806 (15.6 MB)
Run Code Online (Sandbox Code Playgroud)
我想要的是:
enp7s0
Run Code Online (Sandbox Code Playgroud)
小智 10
因为所有接口都会显示在 下/sys/class/,比如/sys/class/net/列出所有网络接口,
可以直接使用这种直接搜索并通过简单的关键字返回确切的接口名称,例如:
ls /sys/class/net | grep enp
小智 7
这是最好的解决方案
ip 路由获取 8.8.8.8 | awk -- '{printf $5}'
或者
echo $(ip 路由获取 8.8.8.8 | awk -- '{printf $5}')
在 bash 脚本中,您可以声明 main_interface 并在任何地方使用 $main_interface
main_interface=$(ip 路由获取 8.8.8.8 | awk -- '{printf $5}')
如果你想排除像vir,loopback和wl( 无线 ) 这样的接口,那么下面的方法应该可以解决问题。
ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}'
Run Code Online (Sandbox Code Playgroud)
这里我们使用冒号作为分隔符,-F:然后$0使用正则表达式检查该行是否与某个字符串不匹配。
| 归档时间: |
|
| 查看次数: |
19036 次 |
| 最近记录: |