在多个wifi环境中如何根据信号强度自动接入

书房和客厅各有一个wifi热点,经常移动widora到这两个地方,感觉手动加入wifi很不方便,想找个办法让widora在开机时候根据信号强度大小自动选择接入,借用了一下connect2ap的代码,对前面部分做了一下修改并改名为auto2ap, 如下:

------------------------- auto2ap.sh ----------------------------

#!/bin/sh
#----- SSIDs and PASSWDs -------
SSID1=ChinaNet-Midas1
PASS1=xxxxxxxxxxxx
SSID2=ChinaNet-Midas2
PASS2=xxxxxxxxxxxx

#-------- default ssid ---------
ussid=$SSID1
upass=$PASS1
#—=--- signal density --------
SIG_SSID1=0
SIG_SSID2=0

OUTPUT=""

until [ -n “$MY_SSID” ];do
#------- search WIFI ---------------
iwpriv ra0 set SiteSurvey=0
sleep 5
OUTPUT=iwpriv ra0 get_site_survey| grep '^[0-9]'
##---------- get ssids ---------------
MY_SSID=echo "$OUTPUT" | grep -E 'ChinaNet-Midas1|ChinaNet-Midas2' #–NO blank beside ‘|’
echo “$MY_SSID”
done

SSID1_STR=echo "$MY_SSID" | grep ChinaNet-Midas1
SSID2_STR=echo "$MY_SSID" | grep ChinaNet-Midas2

#----------- compare signal density -------
if [ -n “$SSID1_STR” ];then
SIG_SSID1=echo "$SSID1_STR" | awk '{ print $6 }'
echo ‘----- ChinaNet-Midas1 found! -----’
fi

if [ -n “$SSID2_STR” ];then
SIG_SSID2=echo "$SSID2_STR" | awk '{ print $6 }'
echo ‘----- ChinaNet2cPv found! -----’
fi

echo ‘SIG_SSID1=’"$SIG_SSID1"
echo ‘SIG_SSID2=’"$SIG_SSID2"

if [ $SIG_SSID1 -gt $SIG_SSID2 ];then
echo “SIG_SSID1 > SIG_SSID2”
ussid=$SSID1
upass=$PASS1
else
echo “SIG_SSID1 <= SIG_SSID2”
ussid=$SSID2
upass=$PASS2
fi

echo ussid="$ussid"
echo upass="$upass"

#----------- 以下部分保持不变 ----------
while read line

把这个脚本放入 /etc/rc.local中,使其在开机时执行:

/bin/auto2ap.sh
/etc/init.d/network restart

试验了一下可以正常工作,不过只能在开机时自动加入, 移动的时候无法自动切换。 抛砖引玉,希望大神们给出更好的方法。