WICD-CLI 脚本:我如何从无线网络列表中读取变量
WICD-CLI Script: How i read variable from the list of wireless networks
我的整个脚本是:
#!/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
cut: oddělovač musí být jediný znak
副信息 získáte příkazem “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
期望的输出是我手动选择的 SELECT 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
在我找到这些脚本之前,我在脚本中使用了 cmds:
ifconfig wlxd46e0e1576c6 down
ifconfig wlxd46e0e1576c6 up
-DOWN- 有效但-UP- 无效
当我将这些新脚本与数字一起使用时,该数字适合我的网络的时间(例如:D-Link)这些脚本运行良好,crontab 中的时间表为 运行 每分钟。
当我在断开连接或处于死状态时从终端执行 运行 脚本时,如连接存在但无法连接到互联网时,此具有正确 Wifi 数量的脚本效果很好。
对于文本格式错误,我深表歉意,但这是我的第一个 post/question。我首先快速 "manual" 阅读了该站点的工作原理,并尝试通过搜索引擎找到答案,但我没有成功。
为澄清起见,我使用的是 Linux Mint 18.2 Sonya 64 位(Mate 版本)。
我同时使用默认网络管理器和 WICD,因为默认网络管理器我已经为我自己的个人无线和 WICD 配置了接入点热点,我用来连接到连接到互联网的无线网络。我发现 WICD 对于低信号无线工作得更好,并且比原来的网络管理器保持连接更稳定。但是我不知道如何在 WICD 中配置接入点和连接到互联网的无线连接。只有 select 设备的可能性(我的是 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=
NET_NUM=$(wicd-cli -l --wireless | grep $SSID | cut -c1)
wicd-cli --wireless -cn $NET_NUM
}
稍后将其用于:
switch_net "D-Link"
我的整个脚本是:
#!/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
cut: oddělovač musí být jediný znak 副信息 získáte příkazem “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
期望的输出是我手动选择的 SELECT 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
在我找到这些脚本之前,我在脚本中使用了 cmds:
ifconfig wlxd46e0e1576c6 down
ifconfig wlxd46e0e1576c6 up
-DOWN- 有效但-UP- 无效
当我将这些新脚本与数字一起使用时,该数字适合我的网络的时间(例如:D-Link)这些脚本运行良好,crontab 中的时间表为 运行 每分钟。 当我在断开连接或处于死状态时从终端执行 运行 脚本时,如连接存在但无法连接到互联网时,此具有正确 Wifi 数量的脚本效果很好。 对于文本格式错误,我深表歉意,但这是我的第一个 post/question。我首先快速 "manual" 阅读了该站点的工作原理,并尝试通过搜索引擎找到答案,但我没有成功。 为澄清起见,我使用的是 Linux Mint 18.2 Sonya 64 位(Mate 版本)。 我同时使用默认网络管理器和 WICD,因为默认网络管理器我已经为我自己的个人无线和 WICD 配置了接入点热点,我用来连接到连接到互联网的无线网络。我发现 WICD 对于低信号无线工作得更好,并且比原来的网络管理器保持连接更稳定。但是我不知道如何在 WICD 中配置接入点和连接到互联网的无线连接。只有 select 设备的可能性(我的是 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=
NET_NUM=$(wicd-cli -l --wireless | grep $SSID | cut -c1)
wicd-cli --wireless -cn $NET_NUM
}
稍后将其用于:
switch_net "D-Link"