2019-10-31day58 shell 练习题和case练习题

day03 shell 练习题

例题1

使用root用户清空/var/log/messages日志,并每次执行保留最近100行
思路:1.必须是root用户
2.需要保留最后100行

[root@manager if]# cat if-19.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-19.sh
# URL:         https://www.xuliangwei.com
# Description: 

Log_Path=/var/log/messages

#如果是普通用户则拒绝
if [ $UID -ne 0 ];then
    echo "Permission denied...."
    exit 1
fi

if [ -f $Log_Path ];then
    #先提取100行的内容写入新的文件
    tail -100 $Log_Path >/var/log/messages_bak

    #将新的文件重新写入到/var/log/messages中
    cat /var/log/messages_bak > $Log_Path

    #最后删除文件
    rm -f /var/log/messages_bak

    #输出结果
    echo "clean log done...."
else
    echo "$Log_Path No such file or directory"
    exit 2

fi

例题2

判断httpd服务是否正常启动, 脚本名必须为httpd_deamon.sh $$
1.手动如何看这个服务是正常的
1.ps
2.losf netstat
3.curl 200 301 302
4.systemctl

###方法1
systemctl status httpd &>/dev/null
if [ $? -eq 0 ];then
    echo "httpd is ok...."
else
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "Httpd 重新启动ok"
    else
        echo "httpd 重新启动失败"
    fi
fi

###方法2
Httpd_status=$(ps aux|grep httpd | grep -v grep |wc -l)
if [ $Httpd_status -ge 1 ];then
    echo "httpd service is ok"
else
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "重新拉起成功"
    else
        echo "重新拉起失败"
    fi
fi

### 方法3

Httpd_Status=$(curl -sI  localhost | awk '/HTTP/ {print $2}')


if [[ "$Httpd_Status" -eq 200  ||  "$Httpd_Status" -eq 301  ||  "$Httpd_Status" -eq 302 ]];then
    echo "Httpd is ok ...."
else
    echo "Httpd is down...."
    echo "尝试复活中......."
    sleep 3
    systemctl start httpd &>/dev/null
    if [ $? -eq 0 ];then
        echo "复活成功"
    else
        echo "复活失败"
    fi
fi

例题3

根据不同的系统版本,配置不同的yum源
1.获取相同系统,不同的版本
2.根据不同系统的不同版本实现
1.判断是centos还是ubuntu
2.根据判断的条件进入嵌套if
2.根据不同的系统配置不同yum源

[root@manager if]# cat if-23.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-23.sh
# URL:         https://www.xuliangwei.com
# Description: 

system_status=$(cat /etc/redhat-release  | awk '{print $(NF-1)}')

if [ ${system_status%%.*} -eq 7 ];then
    echo "systemctl 7"
elif [ ${system_status%%.*} -eq 6 ];then
    echo "systemctl 6"
fi

例题4

安装不同版本的PHP方式,使用echo输出即可,不用真的安装。
1.给一个选择的菜单
2.给一个数字编号 1 2 3 4
3.根据用户的选择进行判断

[root@manager if]# cat if-24.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-24.sh
# URL:         https://www.xuliangwei.com
# Description: 

clear
cat <<EOF
=====================================
1) Installed PHP 5.5 
2) Installed PHP 7.0
3) Installed PHP 7.3 
4) quit
=====================================
EOF
read -p "请输入你要安装的版本 [ 1 | 2 | 3 | 4 ] " Action

#判断空值
if [ -z $Action ];then
    echo "请不要输出空值"
    exit 1
fi


#必须是数字
if [[ ! $Action =~ ^[0-9]+$ ]];then
    echo "仅支持数字"
    exit 1
fi

if [ ${#Action} -ne 1 ];then
    echo "仅支持一位数字"
    exit 1
fi

#判断
if [ $Action -eq 1 ];then
    echo "1) Installed PHP 5.5"
elif [ $Action -eq 2 ];then
    echo "2) Installed PHP 7.0"

elif [ $Action -eq 3 ];then
    echo "3) Installed PHP 7.3"

else
    exit 1
fi

例题5

1.如果姑娘小于18岁,打印“未成年”
2.如果姑娘大于18岁小于25岁,打印“表白”
3.如果姑娘大于25岁小于45岁,打印“阿姨好”。
4.如果姑娘大于45岁,打印“奶奶好”

[root@m01 day002]# vim if_05.sh 
  1 #!/bin/bash
  2 #
  3 #********************************************************************
  4 #Author:               每天学习一点点每天进步一点点
  5 #QQ:                  2869192751
  6 #Date:                2019-10-29
  7 #FileName:            if_05.sh
  8 #URL:                 https://www.caoweiqiang.cn
  9 #Description:         
 10 
 11 read -p "请输入美女的年龄:" year
 12 
 13 if [ $year -lt 18 ];then
 14         echo "美女未成年"
 15         exit 1
 16 fi
 17 
 18 if [ $year -gt 18 -a $year -lt 25 ];then
 19         echo "向美女表白"
 20         exit 2
 21 fi
 22 
 23 if [ $year -gt 25 -a $year -lt 45 ];then
 24         echo "阿姨好"
 25         exit 3
 26 fi
 27 
 28 if [ $year -ge 45 ];then
 29         echo "奶奶好"
 30         exit 4
 31 fi 

例题6

写一个脚本,提示用户输入身高,如果身高达到180以上全票,120以下免票,其余不能进。
1.需要交互
2.判断 超过180
3.判断 低于120
4.其他 over

[root@manager if]# cat if-25.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-25.sh
# URL:         https://www.xuliangwei.com
# Description: 

read -p "请输入你的身高: " Action

if [ $Action -ge 180 ];then
    echo "全票"
else
    if [ $Action -lt 120 ];then
        echo "免票"
    else
        echo "over"
        exit
    fi
fi

例题7

批量探测某个网段的主机存活状态,将存活的主机存入ok.txt文件中

[root@manager for]# cat for-11.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-31
# FileName:   for-11.sh
# URL:         https://www.xuliangwei.com
# Description: 

for i in {1..254}
do
    {
        ip=10.0.0.$i
        ping -W1 -c1 $ip &>/dev/null
        if [ $? -eq 0 ];then
            echo "$ip 存活"
        fi
    }&
done
    wait

例题8

判断主机存活状态,要求判断三次,如果三次失败则失败

[root@manager for]# cat for-12.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-31
# FileName:   for-11.sh
# URL:         https://www.xuliangwei.com
# Description: 

for i in {1..254}
do
    {
            ip=10.0.0.$i
            ping -W1 -c1 $ip &>/dev/null
            if [ $? -eq 0 ];then
                echo "$ip 存活" >> ok.txt

    else
            #如果判断第一次不存活,则在进行一次for循环,循环3次
            for j in {1..3}
            do
                ping -W1 -c1 $ip &>/dev/null
                if [ $? -eq 0 ];then
                    echo "$ip 存活" >> ok.txt
                else
                    echo "$ip 不存活" >> err.txt
                fi
            done
    fi
 }&
done
    wait

例题9

写一个Nginx安装脚本,加入判断,当上一步执行成功在执行下一步,否则退出脚本

1.网络
2.源
3.安装
4.判断
[root@manager if]# cat if-26.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-26.sh
# URL:         https://www.xuliangwei.com
# Description: 

#1.网络
ping -W1 -c1 www.baidu.com &>/dev/null
if [ $? -ne 0 ];then
    echo "网络存在故障...."
    exit 1
fi

#2.源  记得要判断系统
if [ -f /etc/yum.repos.d/epel.repo ];then
    if [ -s /etc/yum.repos.d/epel.repo ];then
        echo "yum repos skip ...."
    else
        echo "epel 为空  wget ..."
        #wget .... 
    fi
else
    echo "epel文件不存在"
    #wget .......
fi

#3.安装
rpm -q nginx &>/dev/null
rc=$?

if [ $rc -eq 0 ];then
    echo "nginx已安装"
else
    yum install nginx -y 
fi

例题10

在每月第一天备份并压缩/etc目录的所有内容,存放到/opt/bak目录,存放的形式
2019_04_10_etc.tar.gz,脚本名称为fileback,存放在/root的家目录下。

1.备份什么  /etc
2.备份到哪  /root/bak
3.备份周期  每月1号 crond
[root@manager if]# cat if-27.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-27.sh
# URL:         https://www.xuliangwei.com
# Description: 

Dest_Dir=/opt/bak
Date=$(date +%F)
#准备存放的目录
if [ ! -d $Dest_Dir ];then
    mkdir -p $Dest_Dir
fi

#打包并将内容存放置备份的目录
cd / && tar czf $Dest_Dir/etc_${Date}.tar.gz etc 

#判断是否ok
if [ ! -f $Dest_Dir/etc_${Date}.tar.gz ];then
    echo "备份失败>......"
fi

例题11

监控内存小于500M和磁盘容量小于10G,则发邮件报警
1.剩余内存低于500M free -m |awk '/^Mem/ {print NF}' 2.剩余磁盘低于10G df -h|awk '/\// {print $(NF-2)}'

[root@manager if]# cat if-28.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-28.sh
# URL:         https://www.xuliangwei.com
# Description: 

Free=$(free -m |awk '/^Mem/ {print $NF}')
Disk=$(df -h|awk '/\/$/ {print $(NF-2)}')


if [ $Free -lt 500 -a ${Disk%G} -lt 10 ];then
    echo "报警......"
else
    echo "目前一切良好"
    echo "内存是: ${Free}M   磁盘是: $Disk"
fi

例题12

检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员

[root@manager if]# cat  if-29.sh
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-29.sh
# URL:         https://www.xuliangwei.com
# Description: 


if [ $UID -eq 0 ];then
    yum install vsftpd -y
else
    echo "你不是管理员>.."
    exit
fi

例题13

输入三个数并进行升序排序

[root@manager if]# cat if-30.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-30.sh
# URL:         https://www.xuliangwei.com
# Description: 

if [ $# -ne 3 ];then
    echo "请传递三个参数"
    exit 
fi
echo "$1 $2 $3" | xargs -n1 | sort -n

例题14

提示用户输入年份后判断该年是否为闰年 能整除4, 并且不能被100整除则为 闰年
2012 / 4 = 整数 -a 2012 / 100 = 有余数

1.传递年份   2012 2013 
2.用年份除以4
    2.1 在用年份除以100
        如果有余数  则是润年
        如果没有    则是平年
[root@manager if]# cat if-32.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   if-32.sh
# URL:         https://www.xuliangwei.com
# Description: 

read -p "请输入你想检测的年份: " Action
#1.先除以4
rn=$(( ${Action} % 4 ))
rn_2=$(( ${Action} % 100 ))
rn_3=$(( ${Action} % 400 ))


#1.判断是否能被400整除
if [ $rn_3 -eq 0 ];then
    echo "$Action 为闰年"
    exit 
else
    #2.没有被400整除的, 先除以4
    if [ $rn -eq 0 ];then
        #3.成立,在除以100,有余数则润
        if [ $rn_2 -ne 0 ];then
            echo "$Action 为闰年"
            exit
        fi
    fi
fi
    echo "$Action 为平年"
--------------------------------------------------------------------------------------
read -p "请输入年份: " Y
if [ $[$Y%4] -eq 0 -a $[$Y%100] -ne 0 ] || [ $[$Y%400] -eq 0 ];then
   echo "$Y 是闰年"
else
   echo "$Y 是平年

例题15

根据用户输入密码位数,生成随机密码(包含数字、大小写字母、特殊符号)
1.怎么生成随机数 mkpasswd -l 8
2.控制输入的长度,最少8位

read -p "请输入你想生成的随机数密码位数: " Action
#控制回车

#控制必须是数字


if [ $Action -ge 7  -a $Action -lt 20 ];then
    mkpasswd -l $Action
else
    echo "复杂度密码必须7位以上"
fi

1.case

1.什么是case
2.csse使用场景
3.case基础语法
4.case脚本案例

需求1:使用case实现nginx服务启停脚本。
需求2:使用case实现nginx状态监控脚本。 stub_status

sh nginx_status.sh
USAGE nginx_status.sh { Active | accepts | handled | requests | Reading  | Writing  |Waiting }
    1.nginx开启状态监控
    [root@manager case]# cat /etc/nginx/conf.d/test.conf 
    server {

        listen 80;
        server_name test.oldxu.com;

        location / {
            index index.html;
        }

        location /nginx_status {
            stub_status;
        }
    }
    2.awk取值     curl -H Host:test.oldxu.com http://127.0.0.1:80/nginx_status
            
    3.case

[root@manager case]# cat case-5.sh 
#!/bin/bash
# Author:      Oldux.com QQ: 552408925
# Date:       2019-10-30
# FileName:   case-5.sh
# URL:         https://www.xuliangwei.com
# Description: 
HostName=test.oldxu.com
Nginx_status_file=nginx.status
Nginx_Status_Path=nginx_status

curl -sH Host:${HostName} http://127.0.0.1/${Nginx_Status_Path} >${Nginx_status_file}
case $1 in
    active)
        echo $(( $(awk '/Active connections/ {print $NF}' ${Nginx_status_file}) -1 ))
        ;;
    accepts)
        echo $(( $(awk 'NR==3 {print $1}' ${Nginx_status_file}) -1 ))
        ;;
    handled)
        echo $(( $(awk 'NR==3 {print $2}' ${Nginx_status_file}) -1 ))
        ;;

    requests)
        echo $(( $(awk 'NR==3 {print $3}' ${Nginx_status_file}) -1 ))
        ;;
    *)
        echo "USAGE: $0 { active | accepts | handled | requests | Reading  | Writing  | Waiting }"
        exit 1
esac
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容

  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,574评论 0 0
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,746评论 0 10
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,000评论 0 13
  • Shell入门 什么是shell? Shell其实是一个命令解释器,作用是解释执行用户输入的命令以及程序等,用户每...
    酷酷的伟阅读 425评论 0 1
  • 想一下,你的有效工作时间是10.4年,可自由支配9年,我们为什么羡慕巴菲特,因为他从12岁开始买了第一支股票,现在...
    和你一起读书分享海阅读 106评论 0 0