bash - WICD-CLI 脚本 : How i read variable from the list of wireless networks

标签 bash shell variables reconnect wifi

我的整个脚本是:

#!/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

我的 friend 建议我这个命令:

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

剪切:oddělovač musí být jediný znak 副信息“cut --help”。 (捷克语 - 翻译成英语) 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

所需输出是我手动选择的 ESSID(例如 ESSID:Horak_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

现在是脚本中 CMD 的数字 3:

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

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

ifconfig wlxd46e0e1576c6 down
ifconfig wlxd46e0e1576c6 up

-DOWN- 有效,但 -UP- 无效

当我使用这些带有数字的新脚本时,对于该数字适合我的网络(例如:D-Link)的时间,这些脚本运行良好,并在 crontab 中安排每分钟运行一次。 当我在断开连接或处于死亡状态时从终端运行脚本时,例如连接存在但与互联网的连接不起作用,那么带有正确数量的 Wifi 的此脚本效果非常好。 我对文本格式错误表示歉意,但这是我的第一篇文章/问题。我首先阅读了该网站如何工作的快速“手册”,然后尝试通过搜索引擎找到答案,但没有成功。 为了澄清起见,我使用的是 Linux Mint 18.2 Sonya 64 位(Mate 版本)。 我同时使用默认网络管理器和 WICD,因为我已为我自己的个人无线网络配置了接入点热点,而 WICD 用于连接到互联网的无线网络。我发现 WICD 对于低信号无线来说效果更好,并且比原来的网络管理器保持连接更稳定。但我不知道如何在 WICD 中配置接入点和无线连接到互联网。只能选择设备(我的设备是 wlxd46e0e1576c6,用于无线互联网,默认网络管理器中的另一个设备用于我自己的接入点。

最佳答案

如果你想要快速的一句台词,你可以使用:

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"

关于bash - WICD-CLI 脚本 : How i read variable from the list of wireless networks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48480637/

相关文章:

linux - Find 返回 "find: .: Permission denied",但我没有搜索

linux - 使用 shell 命令比较 ZIP 文件和目录

c - GTK/Glade 文本输入字符串到 C 中的全局变量

bash - 今天的日期,在 shell 脚本中减去 X 天

linux - Bash 识别具有所有权限的文件

Bash:在 if 语句中声明值

linux - 使用 SQL 获取的拆分管道分隔字符串

linux - Auto Kill Shell 命令并获取输出

c++ - 我可以用函数调用的结果初始化一个全局变量吗?

java - 在 Spring MVC 中,如何存储用户输入并稍后重现它?