我正在尝试编写一个脚本来测试我的 vpn 是否已连接。运行时,脚本当前仅回显 vpn 状态。最终,我希望脚本能做更多的事情,但就目前而言,我正在尝试解决测试问题,这让我感到很沮丧。无论 VPN 处于何种状态,脚本始终报告为“未连接”。
我用来检查状态的命令是nordvpn status
但它吐出的信息行比我要查找的要多,所以我 grep 出报告其连接状态的行。这是nordvpn status
连接时的原始输出。
You are connected to NordVPN.
Current server: us1681.nordvpn.com
Your new IP: xxx.xxx.200.1xx
Current protocol: UDP
Transfer: 1.7 MB received, 500.5 KB sent
这是nordvpn status
我未连接时的输出。
You are not connected to NordVPN.
这是脚本:
#!/usr/bin/env bash
NORDSTAT1="$(nordvpn status | grep connected)"
if [ "$NORDSTAT1 = 'You are not connected to NordVPN.'" ]; then
echo Not Connected
else
echo Connected
fi
如果我在脚本中添加一行表示echo $NORDSTAT1
,则表明连接状态已正确存储在变量中。此外,我已经确认我正在测试的字符串与nordvpn status
.
任何帮助将不胜感激。
脚本中的引用是错误的。行中的表达
if [ "$NORDSTAT1 = 'You are not connected to NordVPN.'" ]; then
是一个完整的字符串,它被插入(变量解析)到
if [ "You are not connected to NordVPN. = 'You are not connected to NordVPN.'" ]; then
这只是检查该字符串是否为非空。你要
if [ "$NORDSTAT1" = "You are not connected to NordVPN." ]; then
而是测试两个字符串的相等性。
测试也可以用grep -q
. 它在不打印的情况下测试图案的存在。相反,结果可以从被确定grep
的返回码(它是0
用于发现与!=0
对于未找到)。在这种情况下,测试必须稍微改变一下:
#!/usr/bin/env bash
if nordvpn status | grep -q "not connected"; then
echo "Not Connected" # the string "not connected" is contained in the output
else
echo "Connected" # ... is not contained
fi
不过,我认为在这种情况下,这只是品味问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句