我需要检查一个脚本,是否 eth0已配置。如果是这样,脚本将不执行任何操作。否则它会启动wlan0。(我不希望同时eth0和wlan0在同一时间待涨)。
什么是最简单的检查方法,是否eth0已经启动?
我正在使用 Debian Wheezy
我不仅要检查电缆eth0是否已插入,还要检查接口是否已配置(即它设置了静态 IP,或者它已收到 DHCP IP)。如果电缆已插入,但未eth0正确配置,我想开始wlan0
cuo*_*glm 56
您可以通过多种方式做到这一点。这里有一个例子:
$ cat /sys/class/net/eth0/operstate
up
Run Code Online (Sandbox Code Playgroud)
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Run Code Online (Sandbox Code Playgroud)
因此,我们grep在这里使用了无处不在的ip工具,stdout用于包含我们感兴趣的界面和短语“状态 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}'
Run Code Online (Sandbox Code Playgroud)
如果您的目标$if是UP、已插入并且有一个CIDR ip 地址,则上面只会打印一个 CIDR ip 地址。对于 ipv6,解决方案同样简单,只需稍作修改。
如果你不喜欢,sed你可以用另一个获得类似的结果,|pipe ... grep并-A在第一个中添加一个上下文选项grep- 但我喜欢sed.
| 归档时间: |
|
| 查看次数: |
151715 次 |
| 最近记录: |