欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 运维知识 > linux >内容正文

linux

linux中srch出现bash,shell练习题(3) -ag凯发k8国际

发布时间:2024/10/14 linux 28 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 linux中srch出现bash,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

总结

以上是编程之家为你收集整理的shell练习题(3)全部内容,希望文章能够帮你解决shell练习题(3)所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,ag凯发k8国际的版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是ag凯发k8国际为你收集整理的linux中srch出现bash,shell练习题(3)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图