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地址取出整理排序
Shell编程——脚本编写思路与过程的更多相关文章
- Shell编程 | 脚本参数与交互及常见问题
		
在执行一个脚本程序时,会经常需要向脚本传递一些参数,并根据输入的参数值生成相应的数据或执行特定的逻辑. 向脚本传递参数 执行Shell脚本时可以带有参数,在Shell脚本中有变量与之对应进行引用.这类 ...
 - shell脚本编写mind
		
首先我们要缩小这个问题的范围 如果在面试中被问到这样的问题,说说shell脚本编写思路 如:你是在公司主要负责zabbix监控的 对答如下:shell脚本这个说法挺广的,您看我这么跟您说吧,我在平时工 ...
 - shell脚本编写规范和相关变量类型
		
shell编程规范与变量 一.shell脚本概述 ① 什么是shell? Linux中有哪些shell? ② shell的作用 ③ 用户的登录shell ④ shell脚本 ...
 - 【转】Shell编程基础篇-下
		
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
 - Shell编程基础篇-下
		
1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file ...
 - 一、Vim编辑器 	二、用户和组管理 	三、软件的安装(jdk,mysql) 	四、Shell编程
		
一.Vim编辑器的使用 1. vim编辑器的运行模式 编辑模式:等待用户编辑命令的输入 插入模式:编辑文本内容 命令模式:执行命令 2. 使用 :vim 文件名 3. 查看当前vim编辑器介绍:vim ...
 - shell编程中
		
1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file ...
 - SHELL编程入门简介
		
一.SHELL软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...
 - Python大法之告别脚本小子系列—信息资产收集类脚本编写(下)
		
作者:阿甫哥哥 原文来自:https://bbs.ichunqiu.com/article-1618-1.html 系列文章专辑:Python大法之告别脚本小子系列目录: 0×05 高精度字典生成脚本 ...
 
随机推荐
- tp框架防止表单重复提交
			
转载 框架官方 http://www.thinkphp.cn/topic/9090.html 第三方 https://my.oschina.net/caomenglong/blog/728908
 - HTML的基本概念
			
HTML语言是一种纯文本类.依靠解释的方式执行的标记语言,它是Internet上用于编写网页的主要语言.用HTML编写的超文本文件称为HTML文件,也是标准的纯文本文件. 当今构成网页文档主要是用HT ...
 - 博客使用 utterances 作为评论系统
			
utterances 是一款基于 GitHub issues 的评论工具. 相比同类的工具 gitment.gitalk 以及 disqus 评论工具,优点如下: 极其轻量 加载非常快 配置比较简单 ...
 - 广联达C++面经(一站式西安) - 2019秋招
			
9月7号通知在广联达西安面试,早上在高新面完中兴一面就赶忙坐地铁倒公交去面试了. 一面(大概30-40min) 刚去签了一个到,就带我去面试了,在一个小型会议室,面试我的是一个女面试官(第一次碰见女 ...
 - static关键字的作用(修饰类、方法、变量、静态块)
			
1. static修饰的类只能为内部类,普通类无法用static关键字修饰.static修饰的内部类相当于一个普通的类,访问方式为(new 外部类名.内部类的方法() ).如下所示: public c ...
 - DRF 筛选
			
from rest_framework.generics import ListAPIView,CreateAPIView,UpdateAPIView,RetrieveAPIView,DestroyA ...
 - python之PEP8规范
			
比较需要注意的 缩进 每一级缩进使用4个空格. 续行应该与其包裹元素对齐,要么使用圆括号.方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐3.当使用挂行缩进时,应该考虑到第一行不应该有参数 ...
 - mysqldump 全备
			
[root@db01 b]#mysqldump -uroot -poldboy123 -A -R --triggers --master-data=2 --single-transaction | g ...
 - 《CoderXiaoban》第八次团队作业:Alpha冲刺1
			
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 Coderxiaoban团队 作业学习目标 (1)掌握软件测试基 ...
 - SQL SERVER使用 CROSS APPLY 与 OUTER APPLY 连接查询
			
概述 CROSS APPLY 与 OUTER APPLY 可以做到: 左表一条关联右表多条记录时,我需要控制右表的某一条或多条记录跟左表匹配的情况. 有两张表:Student(学生表)和 S ...