Shell练习题(3)
(1)查找字母数小于6的单词 用shell打印下面这句话中字母数小于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)输入数字执行对应命令 写一个脚本实现如下功能: 输入一个数字,然后运行对应的一个命令。显示命令如下:cmd meau* 1―date 2?Cls 3?Cwho 4?Cpwd 当输入1时,会运行date,输入2时运行ls,依此类推。 #!/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)监控httpd进程 在服务器上,写一个监控脚本: 每隔10s去检测一次服务器上的httpd进程数,如果大于等于500的时候,就需要自动重启一下apache服务,并检测启动是否成功? 若没有正常启动还需再一次启动,最大不成功数超过5次则需要理解发邮件通知管理员,并且以后不需要再检测! 如果启动成功后,1分钟后再次检测httpd进程数,若正常则重复之前操作(每隔10s检测一次),若还是大于等于500,那放弃重启并需要发邮件给管理员,然后自动退出该脚本。假设其中发邮件脚本为之前咱们使用的 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 需求: 根据web服务器上的访问日志,把一些请求量非常高的ip给拒绝掉! 分析: 我们要做的,不仅是要找到哪些ip请求量不合法,并且还要每隔一段时间把之前封掉的ip(若不再继续请求了)给解封。 所以该脚本的关键点在于定一个合适的时间段和阈值。 比如, 我们可以每一分钟去查看一下日志,把上一分钟的日志给过滤出来分析,并且只要请求的ip数量超过100次那么就直接封掉。 而解封的时间又规定为每半小时分析一次,把几乎没有请求量的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)找规律打印数字 请详细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字。 10 31 53 77 105 141 ....... 试题解析: 我想大多数人都会去比较这些数字的差值: 10 31 53 77 105 141 21 22 24 28 36 但是这个差值看,并没有什么规律,而我们再仔细看的时候,发现这个差值的差值是有规律的: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |