Ubuntu 中的脚本问题

Ubuntu 中的脚本问题

我正在尝试编写一个脚本来测试我的 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,则表明连接状态已正确存储在变量中。此外,我已确认我正在测试的字符串与来自的 grep 行完全匹配nordvpn status

任何帮助将不胜感激。

答案1

脚本中的引用是错误的。行中的表达式

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

不过,我认为在这种情况下这只是一个品味问题。

相关内容