搭载 Linux 的 PC 有多个网络接口,例如两个以太网卡和一个 wifi 适配器(数量和类型可能有所不同)。每个接口都可以连接到网络(也可以离线),网络可以连接到互联网(超级用户网站点可访问),并且可以连接到仅限本地的网络。
我想编写一个 bash 脚本来获取可用于访问互联网的 (本地) IP 地址和适配器名称。如果连接了多个 - 它应该是“要求”加载的浏览器将使用的那个超级用户网网页。如果没有连接的脚本应该echo "internet unavailble"
如何为此类脚本编写检查条件?我如何才能迭代/dev/*
系统中所有具有网络功能的设备?
答案1
也许你不需要迭代。在我的 Debian 9(仅限 IPv4,我不确定它有多相关)中,我可以使用这个:
ip route get "$(host superuser.com | awk 'NR==1 {print $NF}')" \
| grep -o "dev .* src [0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"
其中host
(来自bind9-host
包) 是要转换superuser.com
为其 IP 地址。要处理错误等,您需要解构管道并围绕其部分构建具有一些逻辑的脚本。
示例输出:
dev wlan0 src 192.168.1.2
无论如何,为了进行迭代,请查看/sys/class/net
:
cd /sys/class/net
ls
for interface in *; do
printf "Doing something with %s\n" "$interface"
done
但是这些设备并不在/dev
,至少在我的系统中不存在。