![在 bash 脚本中使用和转义 wpa_cli set_network 命令](https://linux22.com/image/148329/%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%92%8C%E8%BD%AC%E4%B9%89%20wpa_cli%20set_network%20%E5%91%BD%E4%BB%A4.png)
可以通过wpa_supplicant
命令行界面连接到 wifi 网络wpa_cli
。wpa_cli
有两种操作模式:交互模式和正常模式。在正常模式下,必须通过wpa_cli
的参数传递所需的命令。
例如,要连接到网络,必须执行以下命令(以 root 身份):
wpa_cli add_network
> 0 # this is the new network's ID
wpa_cli set_network 0 ssid '"SSID_HERE"'
wpa_cli set_network 0 psk '"PASSPHRASE_HERE"'
wpa_cli enable_network 0
所有这些操作都可以编写脚本。但wpa_cli
需要,对于set_network ssid
和set_network psk
,SSID 和密码都用单引号转义和双引号,如下所示:'"ssid"'
.
然而,当您想要用变量的值替换 ssid 时,这种转义格式很难在脚本中遵循,并且 wpa_cli 不断返回 FAIL 退出状态,而不是 OK。已尝试以下模式:
ssid '"$ssid"' # doesn't work, sets SSID to "$ssid" instead of $ssid's value
ssid \'"$ssid"\' # doesn't work
因此,我的问题是:如何将 ssid 放入脚本中的变量中,并将其用作参数来为 wpa_cli 提供 SSID/密码?
答案1
以下模式对我有用,但我不知道它是否安全:
wpa_cli set_network 0 ssid '"'$ssid'"'
我想只有 ' ' 以及$ssid
' 的值被保留。