将数组内部的字符串连接到 Bash 中的另一个字符串
Concatenate String from inside an Array to another String in Bash
我有不同的 .ovpn 文件和 vpn 配置。我写了一个脚本,检查可用服务器的负载并尝试连接负载最小的服务器。
我的问题是描述 Connection NetworkManager 的字符串变量将被选择,当它们从脚本中的数组调用时 nmcli
无法识别。
我在脚本中是这样拼接和连接的:
top="${TOP_TEN[$iters]}.tcp"
nmcli con up $top --ask
这里nmcli
抛出一个未知的连接错误。我之前尝试回显 $top
变量并尝试手动连接,效果很好。本例中的变量是“bg52.nordvpn.com.tcp”.
然后我又写了 4 行,看看我的连接是否有问题:
TOP_TEN=(vpn1 vpn2 bg52.nordvpn.com vpn4)
echo ${TOP_TEN[2]}.tcp
top="${TOP_TEN[2]}.tcp"
nmcli con up $top --ask
同样在这里它也工作得很好。
有人知道为什么我的 ovpn 连接在作为字符串从 bash 数组传递时无法识别吗?
如果可以帮助您更好地理解问题,这里是完整的脚本。
#!/usr/bin/bash
OVPN_FILES="/usr/lib/python3.10/site-packages/openpyn/files/ovpn_tcp"
COUNTRY_CODE=
TOP_TEN=()
function get_top_servers() {
TOP_TEN=()
while IFS= read -r server; do
TOP_TEN+=( $server )
done < <( nordvpn-server-find -n 10 -l | tail -n 10 | tr -s " " | cut -d\ -f 1 )
}
function get_rand_ccode() {
rand_countr_code=`ls $OVPN_FILES | cut -c1-2 | uniq | shuf | head -n 1`
}
function old_con_down() {
ACTIVE_VPN=`nmcli c show --active | grep vpn | tr -s " " | cut -d\ -f 2`
if [ ! -z "$ACTIVE_VPN" ]; then
echo "Found active connection. Deactivating $ACTIVE_VPN ... "
nmcli con down $ACTIVE_VPN
# sleep 3
fi
}
if [ -z "$COUNTRY_CODE" ]; then
echo "set ccode"
COUNTRY_CODE=$(get_rand_ccode)
fi
echo "Get Top Servers for $COUNTRY_CODE"
get_top_servers $COUNTRY_CODE
iters=0
while [ 1 ]
do
if (( $iters > 9 )); then
COUNTRY_CODE=$(get_rand_ccode)
get_top_servers $COUNTRY_CODE
iters=0
fi
old_con_down
echo "Fastest Server is ..."
top="${TOP_TEN[$iters]}.tcp"
echo "${TOP_TEN[@]}"
nmcli con up $top --ask
if [ -z $? ]; then
exit 1
else
((iters++))
fi
done
我在脚本中使用的 nordvpn-server-find
也与粗体和彩色字体的控制序列相呼应。在将输出输入 nmcli
.
之前,我不得不剥离它们
我有不同的 .ovpn 文件和 vpn 配置。我写了一个脚本,检查可用服务器的负载并尝试连接负载最小的服务器。
我的问题是描述 Connection NetworkManager 的字符串变量将被选择,当它们从脚本中的数组调用时 nmcli
无法识别。
我在脚本中是这样拼接和连接的:
top="${TOP_TEN[$iters]}.tcp"
nmcli con up $top --ask
这里nmcli
抛出一个未知的连接错误。我之前尝试回显 $top
变量并尝试手动连接,效果很好。本例中的变量是“bg52.nordvpn.com.tcp”.
然后我又写了 4 行,看看我的连接是否有问题:
TOP_TEN=(vpn1 vpn2 bg52.nordvpn.com vpn4)
echo ${TOP_TEN[2]}.tcp
top="${TOP_TEN[2]}.tcp"
nmcli con up $top --ask
同样在这里它也工作得很好。
有人知道为什么我的 ovpn 连接在作为字符串从 bash 数组传递时无法识别吗?
如果可以帮助您更好地理解问题,这里是完整的脚本。
#!/usr/bin/bash
OVPN_FILES="/usr/lib/python3.10/site-packages/openpyn/files/ovpn_tcp"
COUNTRY_CODE=
TOP_TEN=()
function get_top_servers() {
TOP_TEN=()
while IFS= read -r server; do
TOP_TEN+=( $server )
done < <( nordvpn-server-find -n 10 -l | tail -n 10 | tr -s " " | cut -d\ -f 1 )
}
function get_rand_ccode() {
rand_countr_code=`ls $OVPN_FILES | cut -c1-2 | uniq | shuf | head -n 1`
}
function old_con_down() {
ACTIVE_VPN=`nmcli c show --active | grep vpn | tr -s " " | cut -d\ -f 2`
if [ ! -z "$ACTIVE_VPN" ]; then
echo "Found active connection. Deactivating $ACTIVE_VPN ... "
nmcli con down $ACTIVE_VPN
# sleep 3
fi
}
if [ -z "$COUNTRY_CODE" ]; then
echo "set ccode"
COUNTRY_CODE=$(get_rand_ccode)
fi
echo "Get Top Servers for $COUNTRY_CODE"
get_top_servers $COUNTRY_CODE
iters=0
while [ 1 ]
do
if (( $iters > 9 )); then
COUNTRY_CODE=$(get_rand_ccode)
get_top_servers $COUNTRY_CODE
iters=0
fi
old_con_down
echo "Fastest Server is ..."
top="${TOP_TEN[$iters]}.tcp"
echo "${TOP_TEN[@]}"
nmcli con up $top --ask
if [ -z $? ]; then
exit 1
else
((iters++))
fi
done
我在脚本中使用的 nordvpn-server-find
也与粗体和彩色字体的控制序列相呼应。在将输出输入 nmcli
.