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

Stella981
• 阅读 389

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

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

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

本文分享自微信公众号 - 民工哥技术之路(jishuroad)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
可莉 可莉
2年前
0615 shell编程1
0615shell编程1一、shell脚本介绍shell是一种脚本语言和传统的开发语言比较,会比较简单shell有自己的语法;可以使用逻辑判断、循环等语法可以自定义函数,目的就是为了减少重复的代码shell是系统命令的集合
Stella981 Stella981
2年前
Linux下shell脚本监控Tomcat的状态并实现自动启动
最近公司需要在Linux下监控tomcat的服务,一旦tomcat服务存在异常或者宕机,重启tomcat保证服务的正常运行,由于Linux下有Shell脚本可以实现此效果,下面是Linux下shell脚本监控Tomcat的状态并实现自动启动的步骤。1.编写Shell脚本monitor.sh!/bin/sh\func:自动监控tomcat脚本
Stella981 Stella981
2年前
0615 shell编程1
0615shell编程1一、shell脚本介绍shell是一种脚本语言和传统的开发语言比较,会比较简单shell有自己的语法;可以使用逻辑判断、循环等语法可以自定义函数,目的就是为了减少重复的代码shell是系统命令的集合
Stella981 Stella981
2年前
Shell 脚本实现 Linux 系统监控
一、实验介绍1.1实验内容本课程实现shell脚本监控系统的各项参数,并可以将脚本加入系统环境中,可以直接在终端里执行。还添加了几个参数,一个脚本可以执行不同的操作。1.2知识点本实验涵盖以下知识点:1.Bash脚本编程2.如何获取Linux系统信息3.如何实时获取Linux
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
2年前
Linux系统shell脚本编程――生产实战案例
Linux系统shell脚本编程――生产实战案例在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验。
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这