Старая версия скрипта Че-то решил переделать.
1. Заводим переменную для хранения каталога с конфигами:CONFIGDIR="~/openvpn/configs"
2. Добавляем функции create_list()
и ask_list()
по этому вот рецептуcreate_list() #$1 - dir, $2 - file mask
{
FOUNDLST=""
for FLE in $(find $1 -maxdepth 1 -iname $2|sort); do
if [ -n "$FLE" ]; then
FOUNDLST="$FOUNDLST"`basename $FLE`"\n"
fi
done
}
ask_list() #$1 - list #$2 - header
{
LIST_BUF=$1
LIST_BUF="$LIST_BUF""Exit "
LIST_BUF="$LIST_BUF""Down"
LIST_BUF=`echo -e "$LIST_BUF"|sed 's/\n/ /'`
PS3=$2
echo
select LIST_RET in $LIST_BUF; do
if [ -n "$LIST_RET" ];then
break
fi
done
}
Единственное что, в create_list()
добавляем сортировку (sort
), а в ask_list()
два пункта - для выхода из скрипта и для разрыва соединения.
3. Делаем функцию для разрыва соединения:ovpn_down()
{
echo -n "Down connection..."
CTR=0
pkill openvpn
while [ "$CTR" -ne "1" ];do
echo -n "."
CTR=`ps ax|grep -c "openvpn"`
sleep 1
done
echo
}
4. Основной скрипт.
4.1. Создаем список из файлов конфигов
4.2. Выводим список на экран и ожидаем ответа пользователя.
4.3. Выводим пользователю, что он выбрал.
4.5. Проверяем, не выбран ли выход - если выбран, завершаем работу скрипта.
4.6. Если выбран пункт Down, то вызываем функцию разрыва соединения и выходим.create_list $CONFIGDIR "*.ovpn"
ask_list $FOUNDLST "Select config: "
echo "Selected: $LIST_RET"
if [[ "$LIST_RET" == "Exit" ]]; then
echo "Exitting..."
exit 0
fi
if [[ "$LIST_RET" == "Down" ]]; then
ovpn_down
exit 0
fi
4.7. Если до этого не вышли, завершаем прошлое соединение, если оно установлено:ovpn_down
4.8. Поднимаем новое соединение (да, тут отправляю лог Openvpn на третий терминал):echo "Up connection..."
openvpn --config "$CONFIGDIR/$LIST_RET" >/dev/tty3 &
4.9. Запускаю скрипт waiter на 10 секунд~/scripts/waiter 10
1. На PasteBin
2. На GitHub
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/08/28/inte