今日练习题
【需求】
写一个监控脚本,监控某站点访问是否正常。
提示:
1)可以将访问的站点以参数的形式提供,例如
sh xxx.sh www.aminglinux.com2)状态码为2xx或者3xx表示正常
【分析】
1)脚本是带有参数的,第一个参数就是要访问的站点URL,传递的第一个参数,在脚本里用$1表示;
2)获取站点状态码,使用curl工具。其中curl的-I参数只获取header信息,里面就包含状态码。例如:
curl -I 'www.aminglinux.com' HTTP/1.1 301 Moved Permanently Server: nginx Date: Fri, 02 Dec 2022 0337 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive Location: http://www.apelearn.com/从结果中可以看到,我们想要的状态码就在第一行。所以,可以将curl的执行结果通过管道符进一步处理。但在这儿有个问题,curl的结果一旦加上管道符后,那么就会多出来一个如下内容的输出
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 162 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0这个内容属于错误输出内容,需要做一下处理,加一个 2>/dev/null即可。
code=`curl --connect-timeout 3 -I $1 2>/dev/null |grep 'HTTP'|awk '{print $2}'`
最终拿到状态码,需要做对比,看是否是2xx或者3xx。我的方法是使用grep做正则匹配:
echo $code |grep -qE '^2[0-9][0-9]|^3[0-9][0-9]'
【参考答案】
#!/bin/bash if ! which curl &>/dev/null then echo "本机没有安装curl" yum install -y curl if ! which curl &>/dev/null then echo "没有安装成功curl" exit 1 fi fi code=`curl --connect-timeout 3 -I $1 2>/dev/null |grep 'HTTP'|awk '{print $2}'` if echo $code |grep -qE '^2[0-9][0-9]|^3[0-9][0-9]' then echo "$1访问正常" else echo "$1访问不正常" fi
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !