我需要检查一个脚本,是否eth0
已配置。如果是这样,脚本将不执行任何操作。否则它将开始wlan0
。(我不希望同时eth0
和wlan0
在同一时间待涨)。
什么是最简单的检查方法,是否eth0
已经启动?
我正在使用Debian Wheezy
澄清:
我不仅要检查电缆eth0
是否已插入,还要检查接口是否已配置(即,它是否设置了静态IP或已接收到DHCP IP)。如果电缆已插入,但eth0
配置不正确,我要启动wlan0
我需要检查一个脚本,是否eth0
已配置。如果是这样,脚本将不执行任何操作。否则它将开始wlan0
。(我不希望同时eth0
和wlan0
在同一时间待涨)。
什么是最简单的检查方法,是否eth0
已经启动?
我正在使用Debian Wheezy
我不仅要检查电缆eth0
是否已插入,还要检查接口是否已配置(即,它是否设置了静态IP或已接收到DHCP IP)。如果电缆已插入,但eth0
配置不正确,我要启动wlan0
Answers:
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
因此,在这里,我们使用grep
了一种普遍使用的ip
工具stdout
,该工具既包含我们感兴趣的界面,又包含短语“ state UP”(感谢@Lekensteyn指出了比不仅仅是更多的特异性UP
)。我们使用该参数a
作为的简写形式address
,这应该足以获取系统中所有已配置网卡的列表。
使用ip
它的一个优势可能是它确实应该在任何地方都可以使用-例如,这就是我通常配置Android手机的网络设备的方式。
将:colons
用于避免部分匹配-这样我们保证了比赛eth0
,而不是否则可能someothereth0
或eth007
。
感谢@RaphaelAhrens为我推动正确性并解释我的解决方案。
要处理当前需求,您可以:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
如果您的目标$if
是UP,已插入并且有一个目标,则以上仅显示CIDR ip地址。对于ipv6,只需稍作修改即可解决。
如果您不喜欢sed
,可以通过与其他方法取得类似的结果,|pipe ... grep
并-A
在第一个方法中添加上下文选项grep
-但我喜欢sed
。
UP
如果设备已启动,但没有连接电缆,则输出还包含:2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
。您还可以指定设备以避免误报:ip addr show dev eth0
。
cat /sys/class/net/ | grep eth0
应该为您提供容易分析的数据。您也可以这样做sudo ethtool eth0 | grep Link