如何获取网络状态(在线/离线)并将其归因于 shell 脚本中的变量?
答案1
我要ip
再次推荐:
status=$(ip -o link show eth0 | awk '{print $9}')
(第九列是接口的状态)
答案2
如果您使用网络管理器进行网络连接,您可以通过 dbus 查询它,如下所示:
dbus-send --type=method_call --print-reply --system --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" org.freedesktop.NetworkManager.state
(有些已弃用,但仍然有效,对于较新的接口,您只需查询不同的地址)
如果返回“3”,则您已“连接”,如中所述http://projects.gnome.org/NetworkManager/developers/spec.html#type-NM_STATE(但它没有提到互联网连接)。
如果您确实想知道是否有互联网连接,只需 ping 一个远程服务器(例如 google.com),看看是否有效。
答案3
另一个...对于较旧的 NIC,命令 mii-tool 很棒
答案4
您说您只想要接口的在线/离线状态,而不关心速度或链接类型。
尝试网络工具,作为根:
# ethtool eth0 |grep "Link detected"
Link detected: yes
# ethtool eth1 |grep "Link detected"
Link detected: no
ifconfig
还可以显示在线/离线状态,并且该命令通常可供系统上的任何用户使用。
$ { /sbin/ifconfig eth0 | grep MTU: | grep -w UP >/dev/null 2>&1 ; }; echo $?
0
# This could return some false errors
$ { /sbin/ifconfig eth1 | grep MTU: | grep -w UP >/dev/null 2>&1 ; }; echo $?
1