Bash - 获取命令(字符串)的值并查看它是不是与另一个字符串匹配

Posted

技术标签:

【中文标题】Bash - 获取命令(字符串)的值并查看它是不是与另一个字符串匹配【英文标题】:Bash - Grabbing value of a command (string) and seeing if it matches another stringBash - 获取命令(字符串)的值并查看它是否与另一个字符串匹配 【发布时间】:2022-01-08 14:33:25 【问题描述】:

尝试在终端中获取cyberghost*** --status 显示的输出,即No *** connections found.*** connection found.

我在 $***_status 上尝试了 | grep -x "No *** connections found." 并收到错误。甚至不记得过去几个小时我尝试过的所有事情。感觉这是一个简单的解决方案,但我只是想念它。以下是代码($index 是从未在此摘录中列出的数组中随机选择的):

***_status="$(cyberghost*** --status)"
echo $***_status
if [[ $? == "No *** connetions found." ]]; then
    echo "Connecting to ***."
    cyberghost*** --country-code $index --server-type traffic --open*** --connect
else
    echo "You are connected to the *** already."
fi

这会返回:

No *** connections found.
You are connected to the *** already.

编辑 - 现在完美运行。这是更新的代码-

array=("AD" "AE" "AL" "AM" "AR" "AT" "BA" "BD" "BE" "BG" "BR" "BS" "BY" "CH" "CL" "CN" "CO" "CR" "CY" "CZ" "DE" "DK" "DZ" "EE" "EG" "ES" "FI" "FR" "GB" "GE" "GL" "GR" "HK" "HR" "HU" "ID" "IE" "IL" "IM" "IN" "IR" "IS" "IT" "JP" "KE" "KH" "KR" "KZ" "LI" "LK" "LT" "LU" "LV" "MA" "MC" "MD" "ME" "MK" "MN" "MO" "MT" "MX" "MY" "NG" "NL" "NO" "NZ" "PA" "PH" "PK" "PL" "PT" "QA" "RO" "RS" "RU" "SA" "SE" "SG" "SI" "SK" "TH" "TR" "TW" "UA" "US" "VE" "VN" "ZA")
size="$#array[@]"
index=$[ $RANDOM % $size ]
Country=$array[$index]
***_status="$(cyberghost*** --status)"
***_connect="$(cyberghost*** --open*** --traffic --country-code $Country --connect)"
echo $***_status
if [[ $***_status == "No *** connections found." ]]; then
    echo "Connecting to ***."
    $***_connect
    echo "New country is $Country"
elif [[ $***_status == "*** connection found." ]]; then
    echo "Changing country..."
    echo "New country is $Country"
else
    echo "This shouldn't have happened..."
fi

全部

【问题讨论】:

只是一个随机的想法......cyberghost*** --status 是否也会发出一个状态,例如0 表示已连接,1 表示已断开连接?在运行状态检查后,echo $? 在这两种情况下都会为您提供什么? @tink 可能。不确定。刚走出去,几分钟后回来我会试试 echo $?要查看通过终端输入状态命令后的内容,Ty 回声 $?断开连接返回 0 对于连接? @Grim : $? 总是一些整数。 [[ $? == "No *** connetions found." ]] 将始终为 false,因为没有整数可以等于此字符串。 【参考方案1】:

您检查的是返回码(一个数字)而不是文本。

这可能会起作用:

***_status="$(cyberghost*** --status)"
echo $***_status
if [[ $***_status == "No *** connetions found." ]]; then
    echo "Connecting to ***."
    cyberghost*** --country-code $index --server-type traffic --open*** --connect
else
    echo "You are connected to the *** already."
fi

【讨论】:

可以发誓我以前试过,但我现在不记得了。刚走出去会在几分钟内让你知道它是否有效。泰 不,不幸的是要更改 $?对于 $***_status 返回相同的结果。泰,寿。遵循@tink 建议的回显cyberghost*** --status 在断开连接时显示0。连接时很可能显示 1,猜猜有一种方法可以创建一个 if 语句来测试 1 或 0 是真还是假? 当我模拟它时,它适用于我的字符串。您可以尝试回显返回码。 echo $? 然后if [[ $? == 0 ]] 如果它们不同,应该可以工作。 是的,刚刚测试了 echo echo $***_status if [[ $? -eq 0 ]]; then,它现在似乎可以工作了,ty :) 现在还有一个问题,它似乎没有成功输入 cyberghost*** --country-code $index --server-type traffic --open*** --connect 想通了。现在效果很好并连接到随机国家。使用size="$#array[@]" index=$[ $RANDOM % $size ] Country=$array[$index] ***_status="$(cyberghost*** --status)" ***_connect="$(cyberghost*** --open*** --traffic --country-code $Country --connect)" 在数组中选择随机字符串【参考方案2】:

在并非不合理的假设下,cyberghost*** --status 如果连接已建立,则将退出代码设置为零,您可以简单地编写

if cyberghost*** --status
then
  echo You are connected
else
  echo Trying to connect 
  ....
fi

【讨论】:

当我运行这个连接到 *** 时,它说 *** connection found. You are connected. 这很好,但断开连接它说 No *** connections found. You are connected. Ty 虽然,这个 --status 标志在我使用 @ 时返回意外的整数987654326@ 运行后。一个到特定国家的连接返回 127。另一个是 0,但它已连接 显然这是来自$?的错误代码,所以它仍然返回0连接或断开

以上是关于Bash - 获取命令(字符串)的值并查看它是不是与另一个字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

我如何更改.properties文件中的值并在jenkins中使用此命令运行构建

SASS:获取现有背景字符串的值并添加到它?

如何获取csv文本的值并插入访问

如何使用 Bootstrap Multiselect 获取所有选定的值并在 AJAX 中使用它

SQL 如何获取 XML 数据列的值并在 where 子句中使用它

在 Bash 中,如何查看字符串是不是不在数组中?