我需要检查脚本是否eth0
已配置。如果是这样,脚本将不会执行任何操作。否则就会开始wlan0
。 (我不想两者eth0
同时wlan0
起床)。
检查是否eth0
已经启动的最简单方法是什么?
我正在使用 Debian Wheezy
澄清:
我不仅想检查电缆是否eth0
已插入,还想检查接口是否已配置(即,它具有静态 IP 设置,或者已收到 DHCP IP)。如果电缆已插入,但eth0
配置不正确,我想启动wlan0
答案1
您可以通过多种方式做到这一点。这里有一个例子:
$ cat /sys/class/net/eth0/operstate
up
答案2
ip a show ethX up
如果没有显示任何内容,则说明您的界面已关闭
答案3
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
所以在这里我们grep
无处不在的ip
工具stdout
对于包含我们感兴趣的界面和短语的行“状态向上”(感谢@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}'
如果您的目标是,以上内容只会打印 CIDR IP 地址$if
是向上,已插入,并且有一个。对于 ipv6,解决方案同样简单,只需进行少量修改。
如果你不喜欢sed
你可以用另一个获得类似的结果|pipe ... grep
并添加一个-A
第一个上下文选项grep
- 但我喜欢sed
。
答案4
其他方法不起作用,但这个方法可以(至少在 Ubuntu 上):
while true; do
ip route | grep "linkdown"
if [ $? -eq 0 ]; then
sleep 1 # network not yet up
else
break # network up
fi
done