#!/bin/bash
start(){
printf 'Real IP: %s\n' "$(curl -s ifconfig.co)"
set -- /etc/openvpn/ovpn_tcp/*.nordvpn.com.tcp.ovpn
shift $(( RANDOM % $# ))
screen -S vpn -dm openvpn "$1" # connect
sleep 5 # wait for connection
printf 'VPN IP: %s\n' "$(curl -s ifconfig.co)"
}
stop(){
screen -S vpn -X quit
pkill -f ovpn
}
status(){
printf 'Current IP: %s\n' "$(curl -s ifconfig.co)"
}
case "$1" in
start)
if screen -ls | grep -w vpn &> /dev/null; then
echo "VPN Already Connected";
status
else
start
fi
;;
stop)
stop
;;
*)
status
;;
esac
O bash
script anterior fornece a seguinte resposta caso seja vpn stop
digitado.
executar vpn stop
se houver conexão ativa vpn
:
[root@A ~]# vpn stop
Terminated
executar vpn stop
se não houver vpn
conexão ativa:
[root@A ~]# vpn stop
No screen session found.
Terminated
O que procuro alcançar é:
executar vpn stop
se houver conexão ativa vpn
:
[root@A ~]# vpn stop
VPN Connection Closed Successfully
executar vpn stop
se não houver vpn
conexão ativa:
[root@A ~]# vpn stop
There's No Active VPN Connection to stop it.
Você deve verificar o sinal de saída do comando de parada:
O Bash armazenará o sinal de saída do último comando executado na
$?
variável. Por padrão, qualquer sinal de saída com valor0
deve ser considerado como bem-sucedido e qualquer outra coisa é uma falha.EDIT: Cometi um pequeno erro de digitação e troquei a ordem do
>&
redirecionador.