shell训练计划30天之第二十二天

例51.判断网站是否正常

要求:写一个shell脚本,通过curl -l 返回的状态码来判定所访问的网站是否正常

比如,当状态码是200时才是正常

要点:

curl -l curl

如何截取状态码

 

 

 

#!/bin/bash

 

url="http://apelearn.com/index.php"

#mail_user=123456@qq.com

code=`curl -I Rurl 2>/tmp/curl.err |head -1 |awk '{print $2}'`

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/ {print $1}' >

/tmp/iptables.log

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

if [ $n -gt 0 ]

then

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

do

iptables -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 '{print $1} | sort -n | uniq -c | sort -n | tail -1 | awk '{print $2}''

 

例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

fi

for i in ` seq 1 $n`

do

echo $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

fi

 

if [ $n2 -le $n ]

then

echo "$n2 should grater than $n."

exit

fi

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

do

echo $i

done

;;

*)

echo "Please input y or n."

;;

esac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值