LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 900|回复: 7

新手求助!请大家帮忙,谢谢!

[复制链接]
发表于 2006-8-29 05:38:02 | 显示全部楼层 |阅读模式
想写一个自动选择连接无线网络的脚本。有homenet和visitnet两个可供连接的网络,当信号强度低于一个定值的时候,就选择连接到另外一个网络。
我是通过iwconfig命令查看Signal level的,信息如下
  1. mobile-node:/#iwconfig
  2. eth1      IEEE 802.11b  ESSID:"visitnet"  Nickname:"ipw2100"
  3.           Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: 02:04:23:B3:34:39
  4.           Bit Rate=0 kb/s   Tx-Power:off
  5.           Retry min limit:7   RTS thr:off   Fragment thr:off
  6.           Encryption key:off
  7.           Power Management:off
  8.           Link Quality=76/100  Signal level=-79 dBm
  9.           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
  10.           Tx excessive retries:0  Invalid misc:0   Missed beacon:0
复制代码
请问怎样才能读取里面Signel level=-79dBm这个信息,来作为if的条件呢(可以就取到79这个值么)?
请大家帮帮忙哦,不甚感激!!!
发表于 2006-8-29 07:20:38 | 显示全部楼层
  1. iwconfig | grep 'Link Quality' | sed 's/^.*Signal level=-\(.*\) dBm$/\1/'
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-29 19:42:56 | 显示全部楼层
万分感谢!!!
我尝试写了一下,但是觉得错了很多,如果text中能找到homenet,可以直接if[$essid1]为真来作为if条件么?还是必须取到essid的名字,然后if[$essid1==homenet]来比较?怎样可以取到essid的名字呢?
你可以帮我看看到底该是怎样的么?谢谢谢谢!
  1. #!/bin/bash
  2. iwconfig > text.txt
  3. #iwlist eth1 scanning >scan.txt
  4. essid1=$(grep homenet /root/text.txt)
  5. essid2=$(grep visitnet /root/text.txt)
  6. sl=$(iwconfig | grep 'Link Quality' | sed 's/^.*Signal level=-\(.*\) dBm$/\1/')
  7. if["$sl" -gt  80]; then
  8.        if[$essid1];then
  9.           iwconfig eth1 essid visitnet
  10.           echo "connect to visitnet"
  11.        elif[$essid2];then
  12.            iwconfig eth1 essid homenet
  13.            echo "connect to homenet"
  14.        else
  15.        echo  "no network detected"
  16.         fi
  17. else
  18.    echo "signel level is good"
  19. fi
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-8-29 19:51:53 | 显示全部楼层
给你回了邮件了,不知收到没
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-29 20:51:16 | 显示全部楼层
收到了,太谢谢了!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-30 20:55:42 | 显示全部楼层
flycraft,我今天调试了一下,多余信息的问题,我把iwconfig命令改成iwconfig eth1可以解决了,但是发现当信号值超过80的时候,它没有自动选择另外一个网络。
  1.         net=$(iwconfig eht1 | grep ESSID | sed 's/^.*ESSID:"\(.*\)" Nickname.*$/\1/')
  2.         qua=$(iwconfig eth1 | grep 'Link Quality' | sed 's/^.*Signal level=-\(.*\) dBm$/\1/')
  3. 这个是现在运行的结果
  4. root@tian:~# ./mipho
  5. ./mipho: line 8: [:           Link Quality=100/100  Signal level=-83 dBm  : integer expression expected
  6. signel level is good
  7. ./mipho: line 8: [:           Link Quality=100/100  Signal level=-83 dBm  : integer expression expected
  8. ./mipho: line 8: [:           Link Quality=100/100  Signal level=-85 dBm  : integer expression
复制代码
expected这个信息是什么意思呀?


下面是iwconfig eth1的信息
  1. eth1      IEEE 802.11b  ESSID:"homenet"  Nickname:"ipw2100"
  2.           Mode:Ad-Hoc  Frequency:2.422 GHz  Cell: 02:04:23:B3:94:74
  3.           Bit Rate=0 kb/s   Tx-Power:off
  4.           Retry min limit:7   RTS thr:off   Fragment thr:off
  5.           Encryption key:off
  6.           Power Management:on
  7.           Link Quality=100/100  Signal level=-81 dBm
  8.           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
  9.           Tx excessive retries:1  Invalid misc:0   Missed beacon:0
复制代码
又麻烦你了,不好意思:)
回复 支持 反对

使用道具 举报

发表于 2006-8-30 22:59:33 | 显示全部楼层
Please quote your code!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-31 17:40:53 | 显示全部楼层
OK,谢谢:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表