代码之家  ›  专栏  ›  技术社区  ›  Tony Stark

WICD-CLI脚本:如何从无线网络列表中读取变量

  •  2
  • Tony Stark  · 技术社区  · 7 年前

    我的整个剧本是:

    #!/bin/bash
    while /bin/true; do
        if ! [ "$(ping -c 1 google.com)" ]; then
            echo "Warning: connection lost at $(date) -- restart"  
            wicd-cli --wireless -x
            sleep 5
            wicd-cli --wireless -cn 1
            sleep 60
            if ! [ "$(ping -c 1 google.com)" ]; then
                 echo "Waiting for connection going up at $(date)"
                 sleep 60
            else 
                 echo "Connection on at $(date)" 
            fi
    #    else
    #        echo "Connection OK on $(date)"
        fi
    sleep 60
    done
    

    我需要从列表中读取值:

    wicd-cli --wireless -l
    #   BSSID           Channel ESSID
    0   00:1D:0F:EA:51:02   9   Liho
    1   5C:6A:80:4C:67:BB   13  Heidrovi
    2   F4:F2:6D:14:87:61   7   InternetNASA
    3   00:23:F8:06:10:99   1   TP-LINK
    4   D8:FE:E3:19:F8:C3   3   D-Link
    5   C4:F0:81:24:15:1F   10  HUAWEI-B315-151F
    6   40:A5:EF:2A:B5:2C   7   InternetNASA-plus
    7   50:C7:BF:11:E7:9E   4   MAXXNET.cz-pravda2
    8   20:2B:C1:96:15:10   1   Internet
    

    例如,ESSID D-Link现在有连接编号4 我知道这一点:

    wicd-cli --wireless -l | grep 'D-Link'
    4   D8:FE:E3:19:F8:C3   3   D-Link
    

    我的朋友给我的建议是: w

    icd-cli --wireless -l | grep 'D-Link' | cut -d' ' -f1
    still output is this:
    4   D8:FE:E3:19:F8:C3   3   D-Link
    
    wicd-cli --wireless -l | grep 'D-Link' | cut -d'' -f1
    

    切割:oddlova mus bt jedin znak Vce informac zskte pkazem cut--帮助。 (捷克语-翻译成英语) 剪切:分隔符必须是唯一的字符 有关更多信息,请转到命令-cut-help-。

    但出于我的目的cmd:

      wicd-cli --wireless -l | grep 'D-Link' | cut -c1
    
    4
    

    我也可以使用文件中列出的wifi数量。。。

    wicd-cli --wireless -l | grep 'D-Link' | cut -c1 > wifi_number
    ao@ROUTER ~ $ cat wifi_number
    4
    

    我需要这样修改脚本:

    #!/bin/bash
    while /bin/true; do
        if ! [ "$(ping -c 1 google.com)" ]; then
            echo "Warning: connection lost at $(date) -- restart"  
            wicd-cli --wireless -x
            sleep 5
            wicd-cli --wireless -cn ***"READ_NUMBER FROM CMD:***"wicd-cli --    
            wireless -l | grep 'D-Link' | cut -c1  ***(Which is 4 for 
            NOW...Its changing during day...)***
    
    
    
     ***OR (My OR, not the logic OR, like i have second idea how to do it,
    
            but still dont know how to read character from file)***
    
            wicd-cli --wireless -l | grep 'D-Link' | cut -c1 > wifi_number
    
            wicd-cli --wireless -cn ***(READ_NUMBER_FROM_FILE=wifi_number) (I 
            dont know how)***
            ***(OR DIRECTLY SOME CMD LIKE THIS:)
            (HOW TO READ WRITE THIS CMD)***
            wicd-cli --wireless -cn | wicd-cli --wireless -l | grep 'D-Link' |        cut -c1
            ***(THIS SEQUENCE GIVES ME THIS:)***
    
    wicd-cli --wireless -cn | wicd-cli --wireless -l | grep 'D-Link' | cut -c1
    Usage: wicd-cli.py [options]
    
    wicd-cli.py: error: -n option requires an argument
    4
    
            sleep 60
            if ! [ "$(ping -c 1 google.com)" ]; then
                 echo "Waiting for connection going up at $(date)"
                 sleep 60
            else 
                 echo "Connection on at $(date)" 
            fi
    #    else
    #        echo "Connection OK on $(date)"
        fi
    sleep 60
    done
    

    所需输出为选项I手动选择ESSID(例如,ESSID:Horak\u LazNet.cz),其在白天的列表中具有不同的值:

    wicd-cli -l --wireless
    #   BSSID           Channel ESSID
    0   00:1D:0F:EA:51:02   9   Liho
    1   5C:6A:80:4C:67:BB   13  Heidrovi
    2   E4:BE:ED:05:67:98   10  CZNetFreeSromovi
    3   E4:BE:ED:7E:71:80   6   Horak_LazNet.cz
    4   F4:F2:6D:14:87:61   7   InternetNASA
    5   C4:F0:81:24:15:1F   10  HUAWEI-B315-151F
    6   D8:B6:B7:86:DD:AD   10  Internet_AC
    7   40:A5:EF:2A:B5:2C   7   InternetNASA-plus
    8   50:C7:BF:11:E7:9E   4   MAXXNET.cz-pravda2
    9   20:2B:C1:96:15:10   1   Internet
    10  5C:F4:AB:00:CF:AB   8   Internet_A8
    11  E4:BE:ED:B9:18:10   2   MAXXNET.cz-kuznikova1
    

    现在是 编号 3对于脚本中的CMD:

    (wicd-cli --wireless -cn *"NUMBER"*) <<<----THIS I Dont know to set up like this pattern <<<----
    wicd-cli --wireless -cn 3
    

    在找到这些脚本之前,我在脚本中使用cmds:

    ifconfig wlxd46e0e1576c6 down
    ifconfig wlxd46e0e1576c6 up
    

    -向下-工作,但向上-不工作

    当我使用这些带有数字的新脚本时,数字fitz在我的网络中的时间(例如:D-Link)这些脚本运行良好,crontab中的时间表每分钟都在运行。 当我在断开连接或处于死机状态时从终端运行脚本时,就像存在连接但无法连接到Internet一样,那么这个带有适当数量Wifi的脚本工作得非常好。 我对文本格式错误表示歉意,但这是我在这里的第一个帖子/问题。我读了第一本快速“手册”这个网站的工作原理,并试图通过搜索引擎找到答案,但我没有成功。 为了澄清,我使用的是Linux Mint 18.2 Sonya 64位(Mate版本)。 我同时使用默认网络管理器和WICD,因为我为自己的个人无线接入点热点配置的默认网络管理器和用于连接到Internet的无线连接的WICD。我发现WICD在低信号无线环境下工作得更好,并且保持连接比原来的网络管理器更稳定。但我不知道如何在WICD中配置接入点和无线连接到Internet togetger。只能选择设备(我的设备是wlxd46e0e1576c6,用于通过Internet进行无线连接,在默认网络管理器中选择另一个设备作为我自己的接入点)。

    1 回复  |  直到 7 年前
        1
  •  2
  •   zw963    6 年前

    如果您想要快速的单衬里,可以使用:

    wicd-cli --wireless -cn `wicd-cli -l --wireless | grep 'D-Link' | cut -c1`
    

    你也可以引入一个新的变量,比如, NET_NUM 使代码更具可读性。

    NET_NUM=$(wicd-cli -l --wireless | grep 'D-Link' | cut -c1)
    wicd-cli --wireless -cn $NET_NUM
    

    或者甚至是bash函数,使其更加通用。

    switch_net() {
      [[ $# != 2 ]] && echo "usage: switch_net <ssid_regexp> && exit 1
      SSID=$1
      NET_NUM=$(wicd-cli -l --wireless | grep $SSID | cut -c1)
      wicd-cli --wireless -cn $NET_NUM
    }
    

    然后将其用于:

    switch_net "D-Link"