我想在 bash 脚本中获取当前连接的 wifi 网络 ssid。我正在尝试编写一个备份脚本,如果 NAS 服务器连接到我的家庭 wifi 网络,该脚本将执行备份到 NAS 服务器。我查看了命令,ip route
但它只返回一些基本信息 -
答案1
iwgetid -r
或者
iwgetid wlan0 -r
答案2
假设您使用 1 台无线设备连接,以下内容将提供您所需的内容:
nmcli -t -f ssid dev wifi| cut -d\' -f2
答案3
此命令返回连接的无线适配器的 SSID(假设您只有一个)。
iwconfig | grep ESSID | sed -e 's/.*ESSID:"\(.*\)".*/\1/'
它还会在终端上打印警告,但在 stderr 上,所以没关系
remi@host~$id:~$ id=$(iwconfig | grep ESSID | sed -e 's/.*ESSID:"\(.*\)".*/\1/')
eth0 no wireless extensions.
lo no wireless extensions.
virbr0 no wireless extensions.
tap0 no wireless extensions.
remi@host:~$ echo $id
CISPI
答案4
使用 NetworkManager-1.8.4,这产生了正确的结果
LANG=C nmcli -t -f active,ssid dev wifi | grep ^yes | cut -d: -f2-
命令的每个部分都有其原因
LANG=C
是因为我们在本地化字符串上使用 grep 所以强制使用英语nmcli ... -f active,ssid ...
导致在表单中打印具有活动状态的 ssidyes:myssid
no:otherssid
grep ^yes
我们希望过滤活动连接,但不过滤带有“yes”文本的 SSID,因此^
cut ... -f2-
在第一个分隔符后打印行的其余部分,这样我们就可以得到带有分隔符的 SSID