【1分鐘系列教程】Linux系統Shell腳本編寫思路與過程

101509087893.png
前段時間有小夥伴問我一些問題,涉及到shell腳本的編寫問題,過後,我深刻思考了下,實際生產環境的確也會常常用到,所以如何寫這個腳本?它的思路在哪?帶這個問題引入今天的文章,僅供參考,若有不完善的地方請多指導。web

問題一:shell

編寫腳本自動統計訪問網站失敗的IP地址segmentfault

題二:網站

編寫腳本自動統計十分鐘內訪問網站的IP地址this

徵對這兩個問題,個人解決思路以下:spa

第一個問題:日誌

1)怎麼纔算訪問網站失敗?code

你們都知道,咱們也會常常打不開一網站,那麼訪問失敗,網站日誌確定會有記錄的,所以,能夠經過查看日誌中的狀態碼(如200、400、403)來判斷用戶的訪問結果server

2)獲取IP地址blog

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

若有錯誤或其它問題,歡迎小夥伴留言評論、指正。若有幫助,歡迎點贊+轉發分享。

歡迎你們關注民工哥的公衆號:民工哥技術之路

image.png

相關文章
相關標籤/搜索