例51.判斷**是否正常
比如,當狀態碼是200時才是正常
要點:curl -l curl
如何擷取狀態碼
#!/bin/bash
url=""
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.歷史命令檔案存在...