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,则表明连接状态已正确存储在变量中。此外,我已经确认我正在测试的字符串与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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章