Linux中srch出现bash,Shell练习题(3)
(1)查找字母數(shù)小于6的單詞
用shell打印下面這句話中字母數(shù)小于6的單詞。
Bash also interprets a number of multi-character options.
#!/bin/bash
forsinBashalsointerpretsanumberofmulti-characteroptions
do
n=`echo$s|wc-c`
if[$n-lt6]
thenecho$s
fi
done
(2)輸入數(shù)字執(zhí)行對應(yīng)命令
寫一個腳本實現(xiàn)如下功能: 輸入一個數(shù)字,然后運行對應(yīng)的一個命令。顯示命令如下:cmd meau* 1―date 2�Cls 3�Cwho 4�Cpwd 當(dāng)輸入1時,會運行date,輸入2時運行l(wèi)s,依此類推。
#!/bin/bash
echo"*cmdmeau**1---date2--ls3--who4--pwd"
read-p"pleaseinputanumber1-4:"n
case$nin
1)
date
;;
2)
ls
;;
3)
who
;;
4)
pwd
;;
*)
echo"Pleaseinputanumber:1-4"
;;
esac
(3)監(jiān)控httpd進程
在服務(wù)器上,寫一個監(jiān)控腳本:
每隔10s去檢測一次服務(wù)器上的httpd進程數(shù),如果大于等于500的時候,就需要自動重啟一下apache服務(wù),并檢測啟動是否成功?
若沒有正常啟動還需再一次啟動,最大不成功數(shù)超過5次則需要理解發(fā)郵件通知管理員,并且以后不需要再檢測!
如果啟動成功后,1分鐘后再次檢測httpd進程數(shù),若正常則重復(fù)之前操作(每隔10s檢測一次),若還是大于等于500,那放棄重啟并需要發(fā)郵件給管理員,然后自動退出該腳本。假設(shè)其中發(fā)郵件腳本為之前咱們使用的 mail.py
#!/bin/bash
check_service()
{
n=0
foriin`seq15`
do
/usr/local/apache2/bin/apachectlrestart2>/tmp/apache.err
if[$?-ne0]
then
n=$[$n+1]
else
break
fi
done
if[$n-eq5]
then
##下面的mail.py參考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
pythonmai.py"123@qq.com""httpdservicedown"`cat/tmp/apache.err`
exit
fi
}
while:
do
t_n=`ps-Chttpd--no-heading|wc-l`
if[$t_n-ge500]
then
/usr/local/apache2/bin/apachectlrestart
if[$?-ne0]
then
check_service
fi
sleep60
fi
sleep10
done
(4)封ip
需求: 根據(jù)web服務(wù)器上的訪問日志,把一些請求量非常高的ip給拒絕掉!
分析: 我們要做的,不僅是要找到哪些ip請求量不合法,并且還要每隔一段時間把之前封掉的ip(若不再繼續(xù)請求了)給解封。 所以該腳本的關(guān)鍵點在于定一個合適的時間段和閾值。
比如, 我們可以每一分鐘去查看一下日志,把上一分鐘的日志給過濾出來分析,并且只要請求的ip數(shù)量超過100次那么就直接封掉。 而解封的時間又規(guī)定為每半小時分析一次,把幾乎沒有請求量的ip給解封!
參考日志文件片段:
157.55.39.107[20/Mar/2015:00:01:24+0800]www.aminglinux.com"/bbs/thread-5622-3-1.html"200"-""Mozilla/5.0(compatible;bingbot/2.0;+http://www.bing.com/bingbot.htm)"
61.240.150.37[20/Mar/2015:00:01:34+0800]www.aminglinux.com"/bbs/search.PHP?mod=forum&srchtxt=LNMP&formhash=8f0c7da9&searchsubmit=true&source=hotsearch"200"-""Mozilla/5.0(compatible;bingbot/2.0;+http://www.bing.com/bingbot.htm)"
#!/bin/bash
logfile=/home/logs/access.log
d1=`date-d"-1minute"+%H:%M`
d2=`date+%M`
ipt=/sbin/iptables
ips=/tmp/ips.txt
block(){
grep"$d1:"$logfile|awk'{print$1}'|sort-n|uniq-c|sort-n>$ips
foripin`awk'$1>100{print$2}'$ips`;do
$ipt-IINPUT-ptcp--dport80-s$ip-jREJECT
echo"`date+%F-%T`$ip">>/tmp/badip.txt
done
}
unblock(){
foriin`$ipt-nvL--line-numbers|grep'0.0.0.0/0'|awk'$2<15{print$1}'|sort-nr`;do
$ipt-DINPUT$i
done
$ipt-Z
}
if[$d2=="00"]||[$d2=="30"];then
unblock
block
else
block
fi
(5)找規(guī)律打印數(shù)字
請詳細(xì)查看如下幾個數(shù)字的規(guī)律,并使用shell腳本輸出后面的十個數(shù)字。
10 31 53 77 105 141 .......
試題解析:
我想大多數(shù)人都會去比較這些數(shù)字的差值:
10 31 53 77 105 141
21 22 24 28 36
但是這個差值看,并沒有什么規(guī)律,而我們再仔細(xì)看的時候,發(fā)現(xiàn)這個差值的差值是有規(guī)律的:
10 31 53 77 105 141
21 22 24 28 36
1 2 4 8
#!/bin/bash
x=21
m=10
echo$m
foriin`seq014`;do
j=$[2**$i]
m=$[$m+$x]
echo$m
x=$[$x+$j]
done
總結(jié)
以上是編程之家為你收集整理的Shell練習(xí)題(3)全部內(nèi)容,希望文章能夠幫你解決Shell練習(xí)題(3)所遇到的程序開發(fā)問題。
如果覺得編程之家網(wǎng)站內(nèi)容還不錯,歡迎將編程之家網(wǎng)站推薦給程序員好友。
本圖文內(nèi)容來源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。
小編個人微信號 jb51ccc
喜歡與人分享編程技術(shù)與工作經(jīng)驗,歡迎加入編程之家官方交流群!
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Linux中srch出现bash,Shell练习题(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redhat linux ls ls,L
- 下一篇: Linux大作业任务书,《Linux系统