zoukankan      html  css  js  c++  java
  • shell 编程练习题2

    需求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
    
    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
    
    ----------------------------------------------------------------
    
    Description: 
    
    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
    
    --------------------------------------------------------
    
    Description: 
    
    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
    3.根据不同的系统配置不同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岁,打印“奶奶好”

    read -p "请输入你的年龄" girl
     11 if [ $girl -lt 18 ];then
     12 echo "未成年"
     13 elif [ $girl -ge 18 -a $girl -lt  25 ];then
     14 echo "表白"
     15 elif [ $girl -ge 25 -a $girl -lt  45 ];then
     16 echo "阿姨好"
     17 elif [ $girl -gt 45 ];then
     18 echo "奶奶好"
     19 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:判断一个机器是否存活,能ping通就算存活。

     10 read -p "请输入你的ip地址" new_ip
     11 ping -W1 -c1 -t3 $new_ip &>/dev/null
     12 if [ $? -eq 0 ];then
     13 echo "你的机器已存活"
     14 else
     15 echo "你的机器没有存活"
     16 fi
    

    需求8:写一个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
    

    需求9:在每月第一天备份并压缩/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
    

    需求10.监控内存小于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
    

    需求11.检测本机当前用户是否为超级管理员,如果是管理员,则使用 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
    
    
    3.输入三个数并进行升序排序
    [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
    

    需求15.提示用户输入年份后判断该年是否为闰年 能整除4, 并且不能被100整除则为 闰年

    1.传递年份 2012 2013
    2.用年份除以4
    在用年份除以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 是平年
    

    需求16.根据用户输入密码位数,生成随机密码(包含数字、大小写字母、特殊符号)

    [root@manager if]# cat if-31.sh 
    #!/bin/bash
    
    Author:      Oldux.com QQ: 552408925
    
    Date:       2019-10-30
    
    FileName:   if-31.sh
    
    URL:         https://www.xuliangwei.com
    
    Description: 
    
    read -p "请输入你想生成的随机数密码位数: " Action
    #控制回车
    
    #控制必须是数字
    
    if [ $Action -ge 7  -a $Action -lt 20 ];then
    	mkpasswd -l $Action
    else
    	echo "复杂度密码必须7位以上"
    fi
    
  • 相关阅读:
    题解 P1030 【求先序排列】
    行列式及其打开方式
    题解 P2580 【于是他错误的点名开始了】
    题解 P1130 【红牌】
    题解 P5239 【回忆京都】
    题解 P1184 【高手之在一起】
    【笔记】自学ST表笔记
    题解 P1208 【[USACO1.3]混合牛奶 Mixing Milk】
    树状数组自学笔记
    EBS R12.2系统logo的修改
  • 原文地址:https://www.cnblogs.com/baozexu/p/11764163.html
Copyright © 2011-2022 走看看