shell訓練計畫30天之第二十二天

2021-09-27 02:02:48 字數 2676 閱讀 8497

例51.判斷**是否正常

比如,當狀態碼是200時才是正常

要點:curl -l curl

如何擷取狀態碼

#!/bin/bash

url=""

#[email protected]

code=`curl -i rurl 2>/tmp/curl.err |head -1 |awk ''`

if [ -z "$code" ]

then

python mail.py $mail_user "usr訪問異常" "`cat /tmp/curl.err`"

exit

elif [ $code != "200" ]

then

curl -i $url &> /tmp/curl.log

python mail.py $mail_user "usr訪問異常,狀態碼$code" "/tmp/curl.log"

f例52 小於5k的檔案打包

要求:將使用者家目錄(考慮到執行指令碼的使用者可能是普通使用者也可能是root)下面小於5k的檔案打包成tar.gz的壓縮包,並以當前日期為檔名字首,例如 2018-03-15.tar.gz

要點:find ./ -type -f -size -5k

date+%f

#!/bin/bash

#這個指令碼用來打包使用者家目錄下小於5k的檔案

t=`date +%f`

cd $home

tar czf $t.tar.gz `find ./ -type f -size -5k | xargs`

例53 監控22埠是否被封

要求:乙個同學不小心用iptables規則把sshd埠22給封掉了,結果不能遠端登入,想要解決這問題,還要去機房,登入真機去刪除這規則。問題來了,要寫個監控監本,監控iptables規則是否封掉了22埠,如果封掉了,給開啟。寫好指令碼,放到計畫任務裡,每分鐘執行一次

要點:如何判定是否封掉22埠是本題的關鍵點

思路是檢視iptables input鏈規則,看是否有目標埠為22的規則,並且規則target為drop或者reject

#!/bin/bash

iptables -nvl input --line-numbers | grep -w 'dpt:22' | awk '$4 ~/reject|drop/ ' >

/tmp/iptables.log

n=`wc -l /tmp/iptables.log`

if [ $n -gt 0 ]

then

for n in ` tac /tmp/iptables.log`

doiptables -d input $n

done

fi例54 分析日誌

要求:已知nginx訪問日誌檔案在/usr/local/nginx/logs/access.log內,請統計早上10點到12點來訪ip最多的是那個

要點需要擷取10點到12點之間的日誌,思路使用grep過濾時間關鍵字

請求的ip在日誌第一段用awk擷取即可

#!/bin/bash

log="/usr/local/nginx/logs/access.log"

t=`date +%d/%b/%y:1[01]:[0-5][0-9]:`egerp "$t" $log|awk ' | sort -n | uniq -c | sort -n | tail -1 | awk '''

例55 列印數字

要求:寫乙個shell指令碼。提示輸入乙個暫停的數字,然後從1列印到該數字,然後詢問是否繼續,繼續的話就再輸入乙個數字接著列印,否則退出指令碼

例:如果輸入的是5,列印12345,然後繼續輸入14,然後列印6 7。。。14 15 以此類推

核心1.根據題目要求,首先用read -p 提示使用者輸入數字,獲取到第乙個數字

2.此時需要判斷使用者輸入的是否是純數字

3.第一次迴圈後,若使用者繼續輸入數字,此時不僅要判斷輸入的是否是純數字,還要判斷輸入的數字是否比第乙個數字大

#!/bin/bash

read -p "please input a number:" n

n1=`echo $n | sed 's/[0-9]//g'`

if [ -n "$n1" ]

then

echo " please input a nubmer"

exit

fifor i in ` seq 1 $n`

doecho $i

done

read -p " if continue y/n:" c

case $c in

n|n)

exit

y|y)

read -p "pleease input a number: " n2

n3=`echo $n2|sed 's/[0-9]//g'`

if [ -n "$n3" ]

then

echo "please input a number."

exit

fiif [ $n2 -le $n ]

then

echo "$n2 should grater than $n."

exit

fifor i in ` seq $[$n+1] $n2`

doecho $i

done

echo "please input y or n."

esac

shell訓練計畫30天之第二十四天

例61 查詢檔案差異 要求 有兩個檔案a.txt和b.txt,需求是吧a.txt中有的但b.txt中沒有的行找出來,並寫入到c.txt,然後計算出c.txt檔案的行數 要點 可以使用while迴圈遍歷a.txt,逐行進行匹配,如果這一行在b.txt中沒有就直接重定向到c.txt中即可 bin bas...

shell訓練計畫30天之第六天

一 什麼是shell 1.shell是一種程式語言 2.shell可以使用邏輯判斷和迴圈等語法 3.shell支援自定義函式 4.shell是系統命令的集合 5.shell指令碼可以實現自動化運維,可以大大增加運維的效率 6.shell其實就是把系統的命令寫進檔案中,有點類似於windows的批處理...

shell訓練計畫30天之第一天

一 什麼是shell 1.是命令直譯器 2.支援特定的語法 邏輯判斷 迴圈 3.每個使用者可以有自己特定的shell 4.centos7預設shell為bash bourne agin shell 5.其他的shell zsh ksh 二 命令歷史 1.按向上方向鍵檢視歷史命令 2.歷史命令檔案存在...