Shell编程——脚本编写思路与过程

2023-11-11



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地址取出整理排序

 

转载于:https://www.cnblogs.com/guarderming/p/9466361.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell编程——脚本编写思路与过程 的相关文章

随机推荐

  • SAS(十二)PROC步

    SAS 十二 PROC步 Proc 用在proc步的开头并规定用户使用的SAS过程名字及其他信息 Var 规定用这个过程分析的一些变量 Model 规定在模型中类似表示因变量 左 和自变量 右 的这样一些变量及其他信息 Weight 规定一
  • 【Token+Vue3】token无感刷新

    token刷新介绍 单token 用于登录判断 toekn过期自动刷新 拒绝一切前端判断token 数据库存储token最后刷新时间与刷新次数 刷新次数上限20次 未登录3天需重新登录来刷新token token刷新规则 token过期自动
  • git命令行提交代码至仓库

    欢迎关注 无量测试之道 公众号 回复 领取资源 Python编程学习资源干货 Python Appium框架APP的UI自动化 Python Selenium框架Web的UI自动化 Python Unittest框架API自动化 资源和代码
  • 任务3 实现用户和物品的相似性计算

    任务3 实现用户和物品的相似性计算 根据协同过滤基础资料当中的相似度的定义 主要有以下几种 由于下面三种相似度的计算涉及到大量的矩阵运算 我采用了pytorch来实现 物品和用户计算相似度其实是一样的 只需要将打分矩阵转置一下即可 下面我就
  • SpringBoot 整合 Shiro 常见配置

    目录 一 Shiro 基础解释 过滤器 AOP 实现安全认证权限管理逻辑 了解 Shiro 的组织架构 二 SpringBoot 整合 Shiro 1 在项目中使用 Shiro 需要配置的地方 2 代码示例 引入依赖 请求接口 自定义 Re
  • 为什么要专门出现GPU来处理图形工作?

    GPU英文名称为Graphic Processing Unit GPU中文全称为计算机图形处理器 1999年由NVIDIA公司提出 一 GPU概述 GPU这一概念也是相对于计算机系统中的CPU而言的 由于人们对图形的需求越来越大 尤其是在家
  • Fsm3s

    See also State transition logic for this FSM The following is the state transition table for a Moore state machine with
  • 关于input type = "file" 样式的美化

    首先
  • 【原创】图像处理第5弹:面部表情识别--微笑

    一 前言 mediapipe模块还提供了面部468个特征点的检测 所以拿来试试做一个面部表情的检测 这次要实现两个目标 1 面部检测 2 微笑表情检测 二 算法原理 1 面部检测 依旧是采用谷歌的mediapipe模块来获取面部的468个特
  • group discussion群面技巧

    群面 又叫无领导小组面试 是企业现在常用的一种面试形式 顾名思义 小组中 每一个面试者都是平等的 需要通过自己的努力 争取到小组公认的角色 并为小组讨论结果 贡献自己的力量 在这个过程中 展示给面试官的是你各方面的能力和素质 分析问题能力
  • MATLAB 绘图基础

    1 设置图片大小 MATLAB中分别用gcf和gca表示 如 set gcf unit centimeters position a b c d 对图形的位置及大小进行设置 单位为厘米 大小为c 厘米 d 厘米 图形起点坐标为 a厘米 b厘
  • 用python写个手势识别功能

    我可以提供一些指导 但是具体的实现还是要看你自己 首先 可以使用OpenCV来获取视频图像 然后使用机器学习技术 如深度学习 来识别手势 接下来 可以使用Python中的各种库 如NumPy SciPy等 来实现图像处理功能 以便实现手势识
  • Arduino智能小车——拼装篇

    Arduino智能小车 拼装篇 Arduino智能小车系列教程时空门 Arduino智能小车 拼装篇 点击跳转 Arduino智能小车 测试篇 点击跳转 Arduino智能小车 调速篇 点击跳转 Arduino智能小车 超声波避障 点击跳转
  • vue js-table2excel 导出excel 可带多张图片

    1 安装js table2excel插件 npm install js table2excel 2 使用 2 1 引入 import table2excel from js table2excel 2 2 导出函数 function exp
  • Docker部署skywalking9.2版本

    注意使用docker部署skywalking和使用tar包部署有点不一样OAP和UI需要分别部署原因是 SkyWalking UI 和 OAP 是 SkyWalking 的两个主要组件 它们之间的关系是前端和后端的关系 SkyWalking
  • windows下环境变量配置后没生效,不重启电脑的解决办法

    本篇文章主要讲解windows配置了环境变量但没有生效的原因及不重启电脑的解决办法 作者 任聪聪 配置环境变量后显示命令不存在 找不到 现象如下 主要原因 windows配置完毕环境变量 由于某种原因没有即时的同步更新 这可能是注册表没有即
  • 解决conda无法创建环境

    想用Python36的环境来做另一个项目 结果创建一直报错 试过在命令台创建 在anaconda界面里面创建 在Pycharm里面创建都失败了 后来查询才发现可能是镜像源的问题 报错情况 解决方法 更改在C Users 16340的 con
  • MFC新建内部消息

    提示 记录一下MFC新建内部消息的成功过程 文章目录 前言 一 第一阶段 二 第二阶段 三 第三阶段 总结 前言 先说一下基本情况 因为要在mapview上增加一个显示加载时间的功能 然后发现是要等加载完再显示时间 显示在主窗口 所以就是在
  • Python基础操作真题(三)

    第七套 1 键盘输入正整数s 按要求把s输出到屏幕 格式要求 宽度为25个字符 等号字符 填充 右对齐 带千位分隔符 如果正整数超过25位则按真实长度输出 s input print gt 25 format eval s 2 获得用户输入
  • Shell编程——脚本编写思路与过程

    Linux系统Shell编程 脚本编写思路与过程 前段时间有小伙伴问我一些问题 涉及到shell脚本的编写问题 事后 我深入思考了下 实际生产环境的确也会经常用到 因此如何写这个脚本 它的思路在哪 带这个问题引入今天的文章 仅供参考 如有不