文档章节

shell高级编程

Tony_zhangyh
 Tony_zhangyh
发布于 2014/06/27 10:46
字数 516
阅读 27
收藏 0
点赞 0
评论 0
#!/bin/bash
##############################################################################
# NOTE:
# The test system is CentOs2.6.32-358
#
# This Scripts all rights reserved deserved by Zhangyh
# Copyright © 2014
#
##############################################################################
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
clear;
 
programs="awk sed grep cat wget cut touch proxychains openvpn mutt ps killall"
for profile in $programs
do
    which $profile > /dev/null 2>&1
    if [ "$?" != "0" ]; then
        echo -e "Your system do not have $profile , Please check your system ."
        exit 1
    fi
done
 
username="lontestt"
pwd="c54239c4"
xmlurl="http://lonlife.net/lonlife.xml"
#ss5conf根据实际情况进行指定配置文件
ss5cnf="/etc/proxychains.conf"
#临时的路径
tmppath="/home/path"
statstime=$(date +"%Y-%m-%d-%H:%M")
myip=`curl -s http://220.181.11.98/cityjson?ie=utf-8|awk -F '\"' '{print $4}'`
[ -f  $tmppath/auth.txt ] || touch $tmppath/auth.txt && echo -e "$username\n$pwd">$tmppath/auth.txt
 
function xmlload(){
#用缓存文件方式存储数据
    curl -s $xmlurl|awk -F '\"' ' {if(/proxytype="1"/){printf "socks5 %s %s\n",$4,$6}else if(/proxytype="3"/){printf "remote %s %s\n",$4,$6}}' > $tmppath/tmpxml.txt
}
 
function socket_test(){
    cat $tmppath/tmpxml.txt| while read line
    do
        if [ "socks5" = ${line%% *} ] ; then
            txt="$line $username $pwd"
            sed -i /socks5/d $ss5cnf
            sed -i "N;/\[ProxyList\]/a $txt" $ss5cnf
            rmip=`proxychains curl -s http://220.181.11.98/cityjson?ie=utf-8|awk -F '\"' '{print $4}'`
                if [ $myip != $rmip ] ; then
                    echo "$statstime,ss5,${line#* },ok" >> $tmppath/sockslog.csv
                else
                    echo "$statstime,ss5,${line#* },down" >> $tmppath/sockslog.csv
                fi
        elif [ "remote" = ${line%% *} ] ; then
            pid_value=$(ps -A|grep openvpn|awk '{print $1}')
            [ $pid_value = ""] || kill -15 $pid_value &&
            vpn_socket &
        fi
    done
}
function vpn_socket(){
#检测证书是否存在
    [ -f "$tmppath/ca.crt" -a -f "$tmppath/lonlife.key" -a -f "$tmppath/lonlife.crt" ] || exit 0 &&
#清空日志
    echo > $tmppath/vpnlog.txt
#建立VPN连接
    openvpn --client --dev tap --persist-key --persist-tun --nobind --pull --comp-lzo --verb 3 --mute 10 --ns-cert-type server --replay-persist cur-replay-protection.cache --ca $tmppath/ca.crt --cert $tmppath/lonlife.crt --key $tmppath/lonlife.key --auth-user-pass $tmppath/auth.txt --auth-nocache --proto udp --route-method exe --route-delay 5 --mssfix 1450 --$line --log $tmppath/vpnlog.txt --daemon
    [ $? -ne 0 ] && echo 'run cmd error' && exit
    num=0
    while true;do
        if grep -q 'Initialization Sequence Completed' $tmppath/vpnlog.txt;then
            break
        elif grep -q 'AUTH_FAILED' $tmppath/vpnlog.txt;then
            num=-1
            break
        elif [ $num -lt 30 ];then
            let num++
            sleep 1
            num=-2
            break
        fi
    done
     
    if [ $num == -1 ];then
        echo -e "$statstime,openvpn,${line#* },AUTH_FAILED"
    elif [ $num == -2 ];then
        echo -e "$statstime,openvpn,${line#* },Connect time out"
    else
        gw=$(route -n |awk '{print $1}'|grep '10.10.*'|sed 's/0$/1/')
        route add -host 220.181.11.98 gw $gw
        address=$(curl -s http://220.181.11.98/cityjson?ie=utf-8|awk '{print $9}'|sed 's/};$//')
        echo -e "$statstime,openvpn,${line#* },ok" >> $tmppath/sockslog.csv
    fi
    kill `pidof openvpn` &> /dev/null
    sleep 5
}
function mymail(){
    mailuser="zhangyongheng1100@163.com"  
    txt=$(cat $tmppath/sockslog.csv |awk -F ',' '/down/ {printf "%s at %s is down.<br> \n",$2,$1}')
    echo $txt |mutt -s "About the state of the socket from $statstime " -e 'set content_type="text/html"' $mailuser -a $tmppath/sockslog.csv
}
 
xmlload
socket_test


© 著作权归作者所有

共有 人打赏支持
Tony_zhangyh
粉丝 1
博文 4
码字总数 2826
作品 0
郑州
项目经理
Shell 高级编程

Shell 高级编程 原创 2016-11-04 景峯 Netkiller Shell 高级编程 http://netkiller.github.io/journal/shell.html Mr. Neo Chen (陈景峯), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街......

neo-chen ⋅ 2016/11/04 ⋅ 0

《高级Bash脚本编程指南》十年来首次修订

  新年伊始,开源慕课的知识库上线了。初期提供了《Linux命令大全/Bash 参考》《高级Bash脚本编程指南》两个系列。其他资料正将陆续上线。   其中,《高级Bash脚本编程指南》对于Shell学...

dbtrain ⋅ 2016/01/28 ⋅ 0

shell 基础知识 第二弹

个人认为,学习shell,一定要从基础开始,如果你连基本的命令都不会用,怎么可能写出几千行的shell脚步(PS,今天走了小差看了下shell和Perl,还是觉得shell更有前途,个人意见,不喜勿喷) ...

枫爱若雪 ⋅ 2012/04/10 ⋅ 3

利用Shell开发跳板机功能脚本案例

先定个小目标,先精通Shell再说!——老男孩 利用Shell开发跳板机功能脚本案例 范例17_6:开发企业级Shell跳板机案例。要求用户登录到跳板机仅能执行管理员给定的选项动作,不允许以任何形式...

老男孩oldboy ⋅ 2017/04/11 ⋅ 0

Shell脚本编程30分钟入门

什么是Shell脚本 示例 看个例子吧: #!/bin/shcd ~mkdir shell_tutcd shell_tut for ((i=0; i<10; i++)); do done 示例解释 第1行:指定脚本解释器,这里是用/bin/sh做解释器的 第2行:切换到...

quanpower ⋅ 2014/03/23 ⋅ 0

shell脚本编程30分钟入门上手

什么是Shell脚本 Shell脚本(英语:Shell script),又称Shell命令稿、程序化脚本,是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种...

湖南小影 ⋅ 2017/05/22 ⋅ 0

TIOBE 9 月排行榜:Java,C,C++ 三分天下何时休

Java,C,C ++ 三门编程语言已经在 TIOBE 的前三排待了有 15 年之久。C# 和 Python 虽然被认为是最有潜力超越他们的两门语言,但到目前为止也没取得任何进展。 C# 是微软公司发布的一种面向对...

达尔文 ⋅ 2017/09/07 ⋅ 34

云计算--培训课程大纲

第一阶段 Linux系统管理实战 01 打开计算机世界的大门 行业分析、计算机基础、 Windows server基础、网络基础 02 Linux基本管理 Linux安装、Linux常规命令、文本编辑器 03 Linux软件与文件系...

wy125629 ⋅ 2017/10/11 ⋅ 0

Xtreme Toolkit Pro专业版介绍

Xtreme Toolkit pro专业版集合了下面所列出的每一个产品。点击每个产品的链接可以看到相关产品的特性简介。当你了解完相关产品特性,你可以返回到本产品网页去浏览Xtreme Toolkit pro专业版余...

javascriptc ⋅ 2014/08/26 ⋅ 0

GitHub Octoverse报告:2017最受欢迎的15种编程语言

摘要:GitHub是全球最大的开源软件开发与管理社区,包括Google、Facebook等众多技术巨头在内都在这里安营扎寨,GitHub也成为了一探硅谷技术趋势最好的窗口,这个20亿美元的创业公司被开发者戏...

SDK.cn ⋅ 2017/12/22 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 30分钟前 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 50分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部