shell习题-22

题目要求

写一个shell脚本,通过curl -I 返回的状态码来判定所访问的网站是否正常。
比如,当状态码为200时,才算正常。

参考答案

#!/bin/bash
#这个脚本用来判断一个网址是否正常
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-11-01

url="http://www.apelearn.com/index.php"
[email protected]

code=`curl -I $url 2>/tmp/curl.err|head -1|awk ‘{print $2}‘`
if [ -z "$code" ]
then
    python mail.py $mail_user "$url访问异常" "`cat /tmp/curl.err`"
    exit
elif [ $code != "200" ]
then
    curl -I $url &> /tmp/curl.log
    python mail.py $mail_user "$url访问异常 状态码$code" "`/tmp/curl.log`"
fi

题目要求

将用户家目录(考虑到执行脚本的用户可能是普通用户也可能是root)下面小于5KB的文件打包成tar.gz的压缩包,并以当前日期为文件名前缀,例如,2018-03-15.tar.gz。

参考答案

查看tar压缩包里面的文件 tar -tf tar.gz

#!/bin/bash
#这个脚本用来打包用户家目录下小于5k的文件
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-11-01

t=`date +%F`
cd $HOME
tar czf $t.tar.gz `find ./ -type f -size -5k|xargs`

题目要求

一个同学不小心用iptables规则把sshd端口22给封掉了,结果不能远程登陆,要想解决这问题,还要去机房,登录真机去删除这规则。 问题来了,要写个监控脚本,监控iptables规则是否封掉了22端口,如果封掉了,给打开。 写好脚本,放到任务计划里,每分钟执行一次。

参考答案

#!/bin/bash
#这个脚本用来解封22端口
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-11-01

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

题目要求

已知nginx访问的日志文件在/usr/local/nginx/logs/access.log内,请统计下早上10点到12点 来访ip最多的是哪个?

参考日志

111.199.186.68 – [15/Sep/2017:09:58:37 +0800]  “//plugin.php?id=security:job” 200 “POST //plugin.php?id=security:job HTTP/1.1″”http://a.lishiming.net/forum.php?mod=viewthread&tid=11338&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3141.7 Safari/537.36”
203.208.60.208 – [15/Sep/2017:09:58:46 +0800] “/misc.php?mod=patch&action=ipnotice&_r=0.05560809863330207&inajax=1&ajaxtarget=ip_notice” 200 “GET /misc.php?mod=patch&action=ipnotice&_r=0.05560809863330207&inajax=1&ajaxtarget=ip_notice HTTP/1.1″”http://a.lishiming.net/forum.php?mod=forumdisplay&fid=65&filter=author&orderby=dateline” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3141.7 Safari/537.36”

参考答案

#!/bin/bash
#这个脚本用来分析Nginx访问日志
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-11-01

//定义语音为英文
export LANG=en
log="/usr/local/nginx/logs/access.log"
#时间的定义    1[01]:[0-5][0-9]:
t=`date +%d/%b/%Y:1[01]:[0-5][0-9]:`

egrep "$t" $log|awk ‘{print $1}‘ |sort -n |uniq -c |sort -n |tail -1 |awk ‘{print $2}‘

题目要求

写一个shell脚本。提示输入一个暂停的数字,然后从1打印到该数字。然后询问是否继续。继续的话再输入一个数字接着打印,否则退出脚本。

例:如果输入的是5,打印1 2 3 4 5,然后继续输入15,然后打印6 7 …14 15 以此类推。

参考答案

#!/bin/bash
#这个脚本用来打印数字
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-11-01

#输入一个数字
read -p "Please input a number: " n
#排除纯数字
n1=`echo $n |sed ‘s/[0-9]//g‘`
if [ -n "$n1" ]
then
    echo "Please input a number."
    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 "Please 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

原文地址:https://blog.51cto.com/865516915/2435837

时间: 2024-11-10 08:47:49

shell习题-22的相关文章

linux shell习题训练

shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前sshd的端口和进程id,处理结果: sshd Port&&pid: 22 5412 输出本机创建20000个目录所用的时间,处理结果: real 0m3.367s user 0m0.066s sys 0m1.925s 打印本机的交换分区大小,处理结果: Swap:1024M

shell习题第22题:

[题目要求] 加入A服务器可直接ssh到B,不用输入密码.A和B都有一个目录是/data/web/这下有很多文件,我们不知道这下面有多少层目录,但是之前的目录结构和文件是一模一样的.但是现在不确定是否一致. 所以以A为标准,检测AB不同的文件,看看哪些文件是被修改过的 [核心要点] md5sum file [脚本] #!/bin/bash dir=/data/web [ -f /tmp/md5.list ] && rm -f /tmp/md5.list while read line do

算法竞赛入门经典习题2-2 水仙花数

这题题目描述出错,应该是3次方: 1 #include <stdio.h> 2 3 int daffldil(int m) 4 { 5 int sum=0,temp; 6 while(m>0) 7 { 8 temp=m%10; 9 sum+=temp*temp*temp; 10 m/=10; 11 } 12 return sum; 13 } 14 15 int main(int argc, const char * argv[]) { 16 int m; 17 while(scanf(&

Shell 学习22 - Shell 函数参数

在Shell中,调用函数时可以向其传递参数.在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数... 带参数的函数示例: #!/bin/bash funWithParam(){ echo "The value of the first parameter is $1 !" echo "The value of the second parameter is $2 !" echo "The value of the

shell学习:几道常见shell习题

1. 编写shell脚本,计算1-100的和: 2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止: 3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下: 4. 编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组: 5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列

shell习题-批量同步代码

需求背景是: 一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具.有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上.但是其他2台服务器也需要做相同变更. 写一个shell脚本,把A服务器上的变更代码同步到B和C上. 其中,你需要考虑到不需要同步的目录(假如有tmp.upload.logs.caches) #!/bin/bash echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B,C机器上&quo

shell习题-清理日志

要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件.在堡垒机批量发布,也要批量发布到crontab里面. A类机器日志存放路径很统一,B类机器日志存放路径需要用*匹配(因为这个目录里除了日志外,还有其他文件,不能删除.匹配的时候可用*.log) A类:/opt/cloud/log/   删除7天前的B类: /opt/cloud/instances/  删除15天前的 要求写在一个脚本里面.不用考虑堡垒机上的操作,只需要写出shell脚本. #!/bin/bash dir1=/

shell习题-判断函数

请使用条件函数if撰写一个shell函数 函数名为 f_judge,实现以下功能 1)当/home/log 目录存在时 将/home目录下所有tmp开头的文件或目录移/home/log 目录. 2)当/home/log目录不存在时,创建该目录,然后退出. #!/bin/bash f_judge (){     if [ -d /home/log ]     then          mv /home/tmp* /home/log/     else         mkdir -p /home

shell习题第10题:打印每个单词的字数

[题目要求] 用shell打印下面这句话中字母数小于6的单词. Bash also interprets a number of multi-character options. [核心要点] for循环遍历所有单词 wc -L获取字符串长度 [脚本] #!/bin/bash c="Bash also interprets a number of multi-character options." n=`echo $c|awk -F '[ +-.]' '{print NF}'` for