#!/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
bash
如果vpn stop
键入,前面的脚本会给出以下答案。
vpn stop
如果有活动vpn
连接运行:
[root@A ~]# vpn stop
Terminated
vpn stop
如果没有活动vpn
连接,则运行:
[root@A ~]# vpn stop
No screen session found.
Terminated
我想要实现的是:
vpn stop
如果有活动vpn
连接运行:
[root@A ~]# vpn stop
VPN Connection Closed Successfully
vpn stop
如果没有活动vpn
连接,则运行:
[root@A ~]# vpn stop
There's No Active VPN Connection to stop it.
您必须检查停止命令的退出信号:
Bash 会将最后执行的命令的退出信号存储在
$?
变量上。按照标准,任何有值的退出信号0
都被认为是成功的,否则就是失败的。编辑:我做了一个小错字并切换了
>&
重定向器的顺序。