我需要检查一个脚本,是否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