使用ifconfig检查我是在本地WiFi还是3G

问题描述:

对于bash脚本,我想确定我的设备是否具有Wi-Fi。最简单的方法是ifconfig和一些正则表达式。 所以我想检查我的接口en0是否有有效的IP。使用ifconfig检查我是在本地WiFi还是3G

ifconfig en0 | grep inet | cut -d: -f2 | awk '{ print $2}' 

给我知识产权。如果我没有一个,它不会返回无效,因为grep命令不返回任何内容。例如,如何在if中检查该问题?

+0

这是如何帮助检查WiFi的存在? 'en0'可能是一个电缆连接。 – 2012-07-25 12:07:38

+0

那么接口就是WiFi接口。所以如果它有一个IP,我肯定是在WiFi上。另外,我没有以太网接口(iPhone)。 – tzippy 2012-07-25 12:09:19

+0

你们俩都是对的。 iPhone **上的'en0'接口是** WI-Fi,但在实际的计算机上可以是Wi-Fi **或**以太网。 – pasawaya 2012-07-25 12:24:50

我的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"; 
+0

你的'cut -d''-f12'命令似乎不会返回同步。 – tzippy 2012-07-25 12:54:11

+0

我已经得到了'(大量的空格)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应该做的工作就好了!