对于 bash 脚本,我想确定我的设备是否有 Wi-Fi。对我来说最简单的方法是 ifconfig 和一些正则表达式。所以我想检查我的接口 en0 是否有有效的 IP。
ifconfig en0 | grep inet | cut -d: -f2 | awk '{ print $2}'
给我IP。如果我没有,它不会返回任何内容,因为该grep
命令什么也不返回。例如,我该如何检查if
?
我设法把它和我在其他网站上找到的信息放在一起。
#!/bin/sh
IP_ADDRESS=$(ifconfig en0 | grep inet | cut -d: -f2 | awk '{ print $2}')
IP_ADDR_VAL=$(echo "$IP_ADDRESS" | grep -Ec '^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])')
if [ $IP_ADDR_VAL -eq 0 ]; then
echo not valid
else
echo valid
fi
实际上,我注意到inet
只有在连接时该部分才存在,所以管道grep inet
应该可以很好地完成工作!
我的 ifconfig 输出不同
inet addr:192.168.210.140 Bcast:192.168.215.255 Mask:255.255.248.0
inet6 addr: fe80::92fb:a6ff:fe66:970/64 Scope:Link
但是差异不是很大,您会发现您需要更改的内容(我知道您需要检查一个接口 - 这里是 eth0;每个接口都有一个 inet 行)
if [[ `/sbin/ifconfig eth0 | grep -e 'inet ' | cut -d ' ' -f12 | grep -E "^addr:[0-9]{3}.[0-9]{3}.[0-9]{3}.[0-9]{3}$" | wc -l` -eq 1 ]]; then
echo "correct IP";
else
echo "no IP";
fi
echo " assigned";