我可以使用以下命令获取所有 Wi-Fi 网络的信号强度:
$ nmcli -t -f SIGNAL device wifi list
$ 77
67
60
59
55
45
44
39
39
37
我想将此列表缩减为仅包含我所连接的当前 Wi-Fi。我已经浏览了手册页,但找不到必要的标志。
一种解决方案是使用sed
or awk
,但我想避免管道。
我应该使用nmcli device wifi
而不是直接解析 SIGNAL 列吗?
答案1
nmcli --version
nmcli tool, version 1.6.2
要获取您所连接的 AP 的信号,请使用:
nmcli dev wifi list | awk '/\*/{if (NR!=1) {print $7}}'
中的第二个*
标记nmcli dev wifi list
用于标识您所连接的 SSID。
nmcli --version
nmcli tool, version 1.22.10
使用:
nmcli dev wifi list | awk '/\*/{if (NR!=1) {print $6}}'
答案2
这里的技巧是使用-f
参数来nmcli
指定脚本中所需的字段。如果您关心 SSID,请使用该SSID
字段;如果您关心自己连接到哪一个,请使用以下IN-USE
字段:
$ nmcli -f IN-USE,SIGNAL device wifi
* SIGNAL
90
* 73
40
$ nmcli -f IN-USE,SIGNAL,SSID device wifi
* SIGNAL SSID
90 wifiWithoutSpaces
* 73 Some Wifi With Spaces
40 Wifi With a * in its SSID
以这种方式对字段进行排序的优点是选择信号是从行开头开始固定数量的列分隔字符;我们现在可以使用 GAD3R 的答案,而不会遇到列计数或 nmcli 版本控制问题:
$ nmcli -f IN-USE,SIGNAL,SSID device wifi | awk '/^\*/{if (NR!=1) {print $2}}'
73
答案3
如果您知道所连接的网络的名称,您可以像这样修改您的方法:(对于 nmcli 1.14.6,其他版本可能会有所不同)
nmcli -t -f SSID,SIGNAL dev wifi list | grep "^<network name>:" | cut -d : -f 2
答案4
查看正在使用的路由器的简单方法:
nmcli -f IN-USE,SIGNAL device wifi | grep '*'