我可以使用以下命令获取所有 Wi-Fi 网络的信号强度:
$ nmcli -t -f SIGNAL device wifi list
$ 77
67
60
59
55
45
44
39
39
37
Run Code Online (Sandbox Code Playgroud)
我只想将此列表减少到我连接的当前 Wi-Fi。我已经浏览了手册页,但找不到必要的标志。
一种解决方案是使用sedor awk,但我想避免管道。
我应该使用nmcli device wifi而不是直接解析 SIGNAL 列吗?
nmcli --version
nmcli tool, version 1.6.2
Run Code Online (Sandbox Code Playgroud)
要获取您所连接的 AP 的信号,请使用:
nmcli dev wifi list | awk '/\*/{if (NR!=1) {print $7}}'
Run Code Online (Sandbox Code Playgroud)
中的第二个*标记nmcli dev wifi list用于标识您所连接的 SSID。
nmcli --version
nmcli tool, version 1.22.10
Run Code Online (Sandbox Code Playgroud)
使用:
nmcli dev wifi list | awk '/\*/{if (NR!=1) {print $6}}'
Run Code Online (Sandbox Code Playgroud)
小智 6
这里的技巧是使用-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
Run Code Online (Sandbox Code Playgroud)
以这种方式对字段进行排序的优点是选择信号是从行开头开始固定数量的列分隔字符;我们现在可以使用 GAD3R 的答案,而不会遇到列计数或 nmcli 版本控制问题:
$ nmcli -f IN-USE,SIGNAL,SSID device wifi | awk '/^\*/{if (NR!=1) {print $2}}'
73
Run Code Online (Sandbox Code Playgroud)