首页 > 学技术 > 技术网文 > Linux Shell > 正文

[原创] [獻醜]自動設 wlan 的 script (in SuSE)


来源 chinaunix.net 酷勤网整理

呵... 先說一下 script 的產生背景吧.

因為我家的格局是台灣傳統的透天厝,
AP 通常只能覆蓋單一樓層, 因此我在 1,2,3 樓各有一個 AP , 分別設為不同的 essid .
我試過設定為相同的 essid, 但有時會產生"蓋台"現像: 也就是在 2 樓會抓到 3 樓的 AP .
呵... 別問我為甚麼會這樣, 我對 wlan 沒啥研究.... (其實是偷懶... ^_^)

anyway, 這在之前用 XP 的時候沒啥問題(呵, 我現在用 SuSE 啦...).
因為 XP 那邊可以自動抓取各層的 essid , 只要將優先次順調好就行了.
但自從改用 SuSE 之後, 就有點不那麼方便了, 每次換樓層都要再設一次 essid.
而且, 有時帶著 notebook 到上班的地方去, 也都要再設一次. 真的很不方便.

呵... 別叫我用那個 yast 啦, 我的耐性還沒那麼好修養...  >_<
唉... 也別嫌我笨, 我真的找不到 SuSE 哪里有自動設定 wlan 的工具.
於是, 山不轉路轉, 操起 shell script , 自己寫一個吧! 呵~~~

得了得了, 我知道你要說甚麼...
好吧, 我得承認這不是一個終極方法.
而且, 我也得坦白: 其實也不是絕對自動啦, 
要用到 encription 跟 authentication 時, 還是要先將 profile 寫好的.
當然囉, 這個 script 只是自己在用, 你要想"偷"回去的話, 也未必 work ,
起碼你得懂得一些 shell script 技巧才改得動.

不管啦, 反正, 現在我用得好好的: 換樓層自動會設好...  ^_^
只要寫一個如下那樣的 shell script,
再為常用那幾個 AP 分別寫好 profile (內容是從 SuSE 的 ifcfg-wlan 抄來再改的) 放到同一個目錄.
然後, 再修改 crontab, 每隔一個時間來重跑就行了. (我是每分鐘跑一次啦)

第一版的 script 內容如下(多多指教哦):
#!/bin/bash

# script name: setwlan.sh
# purpose: set wlan in Linux
# author: nemtan<netman@study-area.org>
# license: GPL
# version: v.01

# caveat: Only tested on SuSE pro 9.3

# change log
# v.01 (2005-10-15)
#       - first release

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# set favorite ap(s) in order
ap_order="Asus 3Com SMC"

# set gateway if necessary
#gw=192.168.1.1

# set destination for ping test
#dest=168.95.1.1

# get current essid
c_id=`iwconfig 2>/dev/null | grep ESSID | awk -F\" '{print $2}'`

# get wlan interface
w_if=`iwconfig 2>/dev/null | grep ESSID | awk '{print $1}'`

# get current ip
c_ip=`ifconfig $w_if | awk '/inet addr:/{print $2}' | cut -d: -f2`

# get crrent gw
c_gw=`route -n | awk '/^0\.0\.0\.0/{print $2}' | head -1`

# set path of 'ifcfg-' file
ifc_file=/etc/sysconfig/network/ifcfg-wlan-id-*

# set profile dir & prefix
# profile name should look like: profile.essid
pro_dir=${0%/*}
pro_prefix=profile

# function to bring up interface and gateway
setwlan() {
       essid=$1
       profile=$pro_dir/$pro_prefix.$essid

       echo "Trying $essid, please wait..."

       # use profile if exists
       if [ -r "$profile" ]; then
         cat $profile > $ifc_file
       # or just change essid only
       else
         sed -i -e "/^WIRELESS_ESSID=/s/=.*/='$essid'/" $ifc_file
       fi

       # re-activate interface
       ifdown $w_if &>/dev/null
       sleep 0.5
       ifup $w_if 2>/dev/null

       # set gateway if specified
       [ "$gw" ] && route add default gw $gw 2>/dev/null

       # show route table
       sleep 0.5
       route -n

       # test connectivity
       [ "$dest" ] && { ping -c2 -w3 $dest || return 1 ; }
       return 0
}

# run program if essid has been specified in parameter
[ "$1" ] && setwlan $1 && exit 0

# otherwise to search all essid avaliable
all_essid=`iwlist scanning 2>/dev/null | grep ESSID | awk -F\" '{print $2}'`

# set essid based on ap list order
for i in $ap_order
do
 echo $all_essid | egrep -qw $i && {
       # nothing to do if essid was up
       [ "$i" = "$c_id" -a "$w_if" -a "$c_gw" ] && exit 1
       # or activate it
       setwlan $i && exit 0
 }
done

# else for other essid(s) which is not in the ap list
for i in $all_essid
do
       setwlan $i && exit 0
done


[ 本帖最后由 網中人 于 2005-11-26 23:43 编辑 ]



 寂寞烈火 回复于:2005-10-17 02:38:28

老大,"界面华丽,功能强大"的德国少女的风情如何? :mrgreen:


 網中人 回复于:2005-10-17 15:23:20

德國少女?
沒接触過耶....

不過, 目前我基本上不用 XP 了. 
SuSE 用起來還算 okay . 
不過, 每個人都有自己的喜好, 自己用起來順手就行...


 寂寞烈火 回复于:2005-10-17 15:59:49

引用:原帖由 "網中人" 发表:
德國少女?
沒接触過耶....

不過, 目前我基本上不用 XP 了. 
SuSE 用起來還算 okay . 
不過, 每個人都有自己的喜好, 自己用起來順手就行...


呵呵,不是都把suse形容为德国少女嘛~~


 twf_cc 回复于:2005-10-17 21:05:46

先收藏了,留待我購入 Notebook 時使用,哈哈,thankyou


 bingosek 回复于:2005-10-19 00:14:09

对我来说,suse是德国少女,redhat是老婆.德国少女偶尔相处一下感觉新鲜,但还是把大部分时间留给老婆


 網中人 回复于:2005-10-19 00:24:37

呵... 還好老婆的帽子是紅色的, 不是綠色的......  ^_^


 plumlee 回复于:2005-11-02 14:31:22

好东西,可我用不上~


 jackylau 回复于:2005-11-02 16:18:33

汗!好像我都看不懂呀.前面和后面的都不知道是什么东东.:oops:


 webcup 回复于:2006-11-30 15:23:42

我想3个楼层的3个AP设置同样的essid,然后用3-5-7-9这样的channel错开。


 網中人 回复于:2006-12-01 01:35:24

哇,一年多前的 script 了耶。現在不用那麼麻煩啦。
用 networkmanager 就很方便了。


 xchen301 回复于:2006-12-01 09:55:54

netman的一定要顶




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=628538
转载请注明作者名及原文出处



收藏本页到: