Старая версия скрипта Че-то решил переделать.
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
Pingback: Устранение глюка с find | Персональный блог Толика Панкова