zoukankan      html  css  js  c++  java
  • Shell编程——脚本编写思路与过程



    Linux系统Shell编程——脚本编写思路与过程

    前段时间有小伙伴问我一些问题,涉及到shell脚本的编写问题,事后,我深入思考了下,实际生产环境的确也会经常用到,因此如何写这个脚本?它的思路在哪?带这个问题引入今天的文章,仅供参考,如有不完善的地方请多指导。

    问题一:

    编写脚本自动统计访问网站失败的IP地址

    问题二:

    编写脚本自动统计十分钟内访问网站的IP地址

     

    征对这两个问题,我的解决思路如下:

    第一个问题:

    1)怎么才算访问网站失败?

    大家都知道,我们也会经常打不开一网站,那么访问失败,网站日志肯定会有记录的,因此,可以通过查看日志中的状态码(如200、400、403)来判断用户的访问结果

    2)获取IP地址

    获取IP地址就很简单了,awk命令就是个不错的选择

     

    第二个问题:

    1)统计IP地址

    同第一个问题一样,方法有很多,也非常简单

    2)如何取得十分钟内的日志

    115.59.74.25 - - [27/Feb/2017:22:54:43 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:44 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    通过上面的日志格式,可以看出日志中是带有时间点信息的,那么只需要将时间点信息找到即可解决

    3)解决时间点的问题

    可以通过awk的命令来获取某段时间内的信息

    awk '$4 >="[27/Feb/2017:22:54:43" && $4 <="[27/Feb/2017:22:54:53'27/Feb/2017:22:54:53"' /wwwlogs/access.log

    115.59.74.25 - - [27/Feb/2017:22:54:43 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:44 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:45 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:47 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:48 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:49 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:50 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:52 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    115.59.74.25 - - [27/Feb/2017:22:54:53 +0800] "GET /Home/SaveData/index HTTP/1.0" 404 3537 "-" "-"

    这样就可以将一段时间内的日志信息取出

    4)解决十分钟的问题

    这时就需要利用到系统的命令date

    [root@ ~]# date +%d/%b/%Y:%k:%M:%S

    01/Mar/2017: 7:32:25                   #当前时间

    [root@nfs-1-1 ~]# date +%d/%b/%Y:%k:%M:%S -d '-10 minutes'

    01/Mar/2017: 7:22:25                   #十分钟前的时间

    那么十分钟内的问题也就解决了



    总结:其实编写的大体思路就是如此,拆分需求解决需求,最终用命令堆砌而成,思路决定出路。

    编写脚本

    自动统计访问网站失败的IP地址

    vi fail_connect_ip.sh

    ##########################################

    #this scripts is for auto check client conntect to            #

    #webserver  failed                                                           #

    #create by mingongge at 2017--0-01                            #

    ##########################################

    !/bin/sh

    egerp "400|403|404|500" /wwwlogs/access.log  |awk '{print $1}' |sort -nr |uniq -c

    最好将结果追加到一个文件,然后查看文件,因为有可能输出太多,前面的统计结果无法看到,当然实际生产环境中访问失败的状态码不止这几个



    最终执行结果如下

    [root@ ~]# sh  fail_connect_ip.sh

          1 29.20.20.3

          1 2.11.22.1

          8 1.1.1.1

     

    统计十分钟内访问网站的IP地址

    vi client_connect_ip.sh

    ##########################################

    #this scripts is for auto check  conntect to                     #

    #webserver   client's ip                                                    #

    #create by mingongge at 2017--0-01                            #

    ##########################################

    !/bin/sh

    TIME=`date +%d/%b/%Y:%k:%M:%S`

    NTIME=`date +%d/%b/%Y:%k:%M:%S -d '-10 minutes'`

                   #定义时间变量

    awk '$4 >= "'[$NTIME'" && $4 <= "'[$TIME'"' /wwwlogs/access.log  >log.txt  

                    #获取时间段内的日志信息

    awk '{print $1}'  log.txt |sort -nr |uniq

                    #将IP地址取出整理排序

  • 相关阅读:
    蔚来汽车笔试题---软件测试
    python 装饰器
    adb
    新手安装禅道至本地
    各种验证码应该如何给值
    int col = Integer.parseInt(args[0]);的用法
    找不到jsp文件:ctrl+shift+R
    通过服务器获取验证码
    Sublime Text 2: [Decode error
    爬虫爬取新闻(二)
  • 原文地址:https://www.cnblogs.com/guarderming/p/9466361.html
Copyright © 2011-2022 走看看