使用ifconfig检查我是在本地WiFi还是3G
对于bash脚本,我想确定我的设备是否具有Wi-Fi。最简单的方法是ifconfig和一些正则表达式。 所以我想检查我的接口en0是否有有效的IP。使用ifconfig检查我是在本地WiFi还是3G
ifconfig en0 | grep inet | cut -d: -f2 | awk '{ print $2}'
给我知识产权。如果我没有一个,它不会返回无效,因为grep
命令不返回任何内容。例如,如何在if
中检查该问题?
我的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
但是差别不是很大U将找出u需要改变(我的理解u需要检查一个接口 - 在这里为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";
你的'cut -d''-f12'命令似乎不会返回同步。 – tzippy 2012-07-25 12:54:11
我已经得到了'(大量的空格)inet addr:192.168.210.140 Bcast:192.168.215.255 Mask:255.255.248.0'/ sbin/ifconfig eth0 | grep -e'inet''。你需要检查你的grep打印和调整cut选项-f。 – 2012-07-25 13:19:28
我设法与信息,我在其他网站上发现一起把这个。
#!/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
应该做的工作就好了!
这是如何帮助检查WiFi的存在? 'en0'可能是一个电缆连接。 – 2012-07-25 12:07:38
那么接口就是WiFi接口。所以如果它有一个IP,我肯定是在WiFi上。另外,我没有以太网接口(iPhone)。 – tzippy 2012-07-25 12:09:19
你们俩都是对的。 iPhone **上的'en0'接口是** WI-Fi,但在实际的计算机上可以是Wi-Fi **或**以太网。 – pasawaya 2012-07-25 12:24:50