美文网首页
shell练习题

shell练习题

作者: 吃可爱长大鸭 | 来源:发表于2019-11-05 20:12 被阅读0次

    1.read示例语法,简单备份场景

    提示用户输入一个要备份的目录
    提示用户你备份的目录是什么
    开始备份
    提示备份完成
    
    #!/bin/bash
    read -p "请输入要备份的目录:" dir
    read -p "请问要备份的目录是什么:" op
    echo "目录开始备份" && echo "备份完成"
    

    2.read示例语法,测试用户输入的IP是否通

    #!/bin/bash
    read -p "请输入IP地址:" IP
    ping -c1 -W1 $IP &>/dev/null
    if [ $? -eq 0 ]; then
        echo "IP $IP 地址是通的!"
    else
        echo "IP $IP 地址是不通的!"                                                                                 
    fi
    

    3.使用read 命令写一个脚本修改主机名

    #!/bin/bash
    read -p "请输入主机名:" hostname
    hostnamectl set-hostname $hostname &>/dev/null
    

    4.修改ip地址的脚本,脚本可以无限的执行

    #!/bin/bash
    #1.提示用户输入新的ip地址
    read -p "请输入你新的IP地址的主机位:" Host_Ip
    #2.提示用户是否确认修改
    read -p "请确认是否修改ip地址的主机位:[Y|N]:" Qr
    #3.根据用户输入的Y|N进行判断
    if [ $Qr == "Y" ];then
        echo "你确认修改ip地址的主机位"
        sed -ri   "s#(^IPAD.*\.).*#\1$Host_Ip#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]  &>/dev/null
        if [ $? -eq 0 ];then
            echo "IP地址的主机位修改成功!"
            read -p "是否确认要重启网络服务进行生效![Y|N]:" qr
            if [ $qr == "Y" ];then
                echo "你选择重启网路服务!请做好心理准备!"
                echo "重启网络服务之后,当前会话会断开,需要使用新的ip地址进行连接登录。"
                systemctl  restart  network  &>/dev/null
            else
                echo "你没有选择重启网路服务!你可以选择手动重启!"
                exit
            fi
        else
            echo "IP地址的主机位修改失败!"
            exit
        fi
    else
        echo "你选择放弃修改ip地址IP主机位,再见!"
        exit
    fi
    

    5.. 场景实践一:查看内存当前使用状态,如果使用率超过80%则报警发邮件

    #!/bin/bash
    free=$(free -m |awk -F "[ .]+" '/^Mem/{print $3/$2*100}'|awk -F '.' '{print $1}')
    mail=$(mail -s "内存报警" 1003451503@qq.com < /root/5.txt &>/dev/null)
    if [ $free -ge 11 ]; then                                                                                        
        echo "内存$free 使用正常"
    else
        echo "内存$free 使用不正常"
    fi
    

    内存压力测试
    [root@web ~]# dd if=/dev/zero of=/dev/null bs=700M count=100

    6.场景实践二:在每月第一天备份并压缩/etc目录的所有内容,存放到/root/bak目录,存放的形式 2019-11-05_etc.tar.gz,脚本名称为fileback,存放在/root的家目录下。

    1.备份什么   /etc/
    2.备份到哪里  /root/bak
    3.怎么备份  gzip  tar  
    4.带上时间信息
    
    #!/bin/bash
    Date=$(date +%F)
    Bak_Dir=/root/bak
    [ -d $Bak_Dir ] || mkdir -p  $Bak_Dir
    #2.判断文件存不存在
    if [ ! -f $Bak_Dir/${Date}_etc.tar.gz ];then
        tar czf $Bak_Dir/${Date}_etc.tar.gz  /etc/ &>/dev/null
        if [ $? -eq 0 ];then
            echo "/etc/目录打包备份成功!"
        else
            echo "/etc/目录打包备份失败!"
            exit
        fi
    else
        echo "当前目录已经备份过!你可以检查一下是否重复备份!"
        exit
    fi
    

    7.场景实践三:在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件

    1)批量修改txt为txt.bak                           
    2)把所有的.bak文件打包压缩为123.tar.gz         
    3)批量还原文件的名字,及把增加的.bak再删除
    
    #!/bin/bash
    dir=/backup
    [ ! -e $dir ] && mkdir $dir || cd $dir
    for i in {1..10}.txt
    do
        touch $i
    done
    find  $dir  -type  f  -name "*.txt"  >$dir/txt.log
    
    #循环
    for i in $(cat $dir/txt.log) 
    do
        mv $i ${i}.bak
    done
    
    echo "文件名已经全部修改为.bak."
    #打包
    if [ ! -f $dir/123.tar.gz ];then
        tar czf $dir/123.tar.gz  $(find $dir -type f -name "*.bak") &>/dev/null
        if [ $? -eq 0 ];then
            echo "所有的.bak文件已经打包压缩备份成功!"
        else
            echo "所有的.bak文件已经打包压缩备份失败!"
            exit
        fi
    else
        echo "所有的.bak文件已经打包压缩备份,看下是否重复备份!"
    fi
    #还原
    find $Dir -type f -name "*.bak"  >$Dir/bak.log
    
    for i in  $(cat $Dir/bak.log)
    do
            mv  $i   ${i%.*}  
        done
    
        echo "文件名还原成功!"
    

    8.取出下列字符串长度小于3的单词,I am qiuzengjia teacher I am 18。

    #!/bin/bash
    for i in I am qiuzengjia teacher I am 18
    do
            [ ${#i} -lt 3 ]  &&  echo $i
        done                                       
    

    9.做一个加减乘除的计算器。

    #!/bin/bash                                                                                                                                                  
    read -p "请输入第一个数字:" num1
    read -p "请输入第二个数字:" num2
    echo "$num1 + $num2 = $[ $num1 + $num2 ]"
    echo "$num1 - $num2 = $[ $num1 - $num2 ]"
    echo "$num1 * $num2 = $[ $num1 * $num2 ]"
    echo "$num1 / $num2 = $[ $num1 / $num2 ]"
    

    10.使用Shell脚本打印,系统版本、内核版本平台、虚拟平台、静态主机名、eth0网卡IP地址、eth1网卡IP地址、当前主机的外网IP地址curl -s icanhazip.com

    #!/bin/bash
    System=$(hostnamectl   |awk '/System/{print $3,$4,$5}')                                             
    Kernel=$(hostnamectl  |awk '/Kernel/{print $3}')
    Vm=$(hostnamectl  |awk '/Virtua/{print $2}')
    Hostname=$(hostnamectl  |awk '/Static/{print $3}')
    Eth0=$(ifconfig eth0 |awk 'NR==2{print $2}')
    Eth1=$(ifconfig eth1 |awk 'NR==2{print $2}')
    Network=$(curl -s  icanhazip.com)
    echo "当前系统版本为:$System"
    echo "当前内核版本及平台为:$Kernel"
    echo "当前系统虚拟平台为:$Vm"
    echo "当前系统静态主机名为:$Hostname"
    echo "当前eth0 IP地址为:$Eth0"
    echo "当前eth1 IP地址为:$Eth1"
    echo "当前系统外网ip为:$Network"
    

    11.需求描述:变量string="Bigdata process is Hadoop, Hadoop is open source project",执行脚本后,打印输出string变量,并给出用户以下选项:

    #需求
    1)打印string长度
    2)删除字符串中所有的Hadoop
    3)替换第一个Hadoop为Linux
    4)替换全部Hadoop为Linux
    用户请输入数字1|2|3|4,可以执行对应项的功能。
    
    #!/bin/bash
    while true
    do
    string="Bigdata process is Hadoop, Hadoop is open source project"
    cat << EOF
    1)、打印string长度
    2)、删除字符串中所有的Hadoop
    3)、替换第一个Hadoop为Linux
    4)、替换全部Hadoop为Linux
    EOF
        read -p "用户请输入数字,可以执行对应项的功能: " ll
        if [ $ll -eq 1  ];then
            echo "${#string}"
        fi
        if [ $ll -eq 2 ]; then
            echo ${string//Hadoop/}
        fi
        if  [ $ll -eq 3 ]; then
            echo ${string/Hadoop/Linux}
        fi
        if  [ $ll -eq 4 ]; then
            echo ${string//Hadoop/Linux}
            exit
        fi
        echo "------------------------------------------"
    done
    

    12.判断用户存不存在系统,存不存在家目录。

    #!/bin/bash
    if grep $1 /etc/passwd &>/dev/null;then
        echo "用户$1 存在该系统。"
        if ls -d  /home/$1 &>/dev/null;then
            echo "用户$1 存在家目录。"
        else
            echo "用户$1 不存在家目录。"
        fi
    else
        echo "用户$1 不存在该系统。"                                                                    
        if ls -d /home/$1  &>/dev/null;then
            echo "用户$1 存在家目录。"
        else
            echo "用户$1 不存在家目录。"
        fi
    fi
    

    13.文件比较场景实践,备份数据库

    #1.备份mysql,手动输入你需要备份的库名称
    
    1)提示用户手动输入库名称:read 
    2)如果用户输入数据库名称,则执行mysqldump命令备份
    3)备份到哪,/backup/mysql 
    4)超过7天的删除
    
    #!/bin/bash
    #1.提示用户输入要备份的数据库
    read -p "请输入你要使用哪一个用户进行备份:" Db_user
    read -s -p "请输入备份用户的密码:" Db_pass
    echo
    read -p "请输入你要备份的数据库:" Db
    #2.定义变量
    Date=$(date +%F)
    Bak_Dir=/backup/mysql
    
    #3.判断备份目录是否存在
    [  -d $Bak_Dir ] || mkdir -p $Bak_Dir  &>/dev/null
    
    #4.备份数据库
    
    mysqldump -u$Db_user -p$Db_pass -B $Db > $Bak_Dir/${Date}_${Db}.sql 
    
    if [ $? -eq 0 ];then
        echo "数据库$Db  备份成功!"
    else
        echo "数据库$Db 备份失败!"
        exit
    fi
    
    #超过7天的数据删除
    
    find  $Bak_Dir  -mtime +7 -delete 
    if [ $? -eq 0 ];then
        echo "七天以前的数据清除成功!"
    else
        echo "七天以前的数据清除失败!"
        exit
    fi
    

    14.查看磁盘/分区当前使用状态,如果使用率超过80%则报警发邮件

    #!/bin/bash                                                                                         
    Df=$(df -h |awk 'NR==2{print $5}') 
    if [ ${Df/\%/} -gt 10 ];then
         echo "磁盘使用率过高!当前使用率为:$Df"
    else
         echo "磁盘使用率正常!当前使用率为:$Df"
    fi
    

    15. 场景实践三:条件测试,创建用户

    0.提示用户输入一个要创建的用户
    1.判断用户是否存在,存在则提示
    2.不存在,则创建
    3.判断创建是否成功
    
    #!/bin/bash                                                                                         
    read -p "请输入要创建的用户:" yh
    
    grep $yh /etc/passwd &>/dev/null
    
    if [ $? -eq 0 ];then 
        echo "该$yh 用户存在."
        exit
    else
        useradd $yh &>/dev/null
        if [ $? -eq 0 ];then
            echo "用户$yh 创建成功!"
        else
            echo "用户$yh 创建失败!"
        fi
    fi
    

    16.场景实践四:函数库使用,判断url地址是否能通

    #!/bin/bash
    [ -f /etc/init.d/functions ]  &&  source  /etc/init.d/functions 
    
    read -p "请输入一个你要测试的url地址:"  Url
    
    ping -c1 -W1 $Url  &>/dev/null
    
    if [ $? -eq 0 ];then
        action "该url地址$Url 是通的。"  /bin/true                                                      
    else
        action "该url地址$Url 是不通的。" /bin/false
    fi
    

    17.根据学生录入的成绩判断,学生的优劣

      0-60  补考
      60-80 合格
      80-100 优秀
    
    思路:
         两个条件判断
         考虑整数
         不能回车为空
    
    单条件 
    
    [root@web /scripts/day04]# cat fenshu-1.sh
    #!/bin/bash
    read  -p  "请输入一个分数:" fs
    
    expr $fs + 1  &>/dev/null
    if [ ! $? -eq 0 ];then
        echo  "请输入一个整数!"
        exit
    fi
    
    if [ -z $fs ];then
        echo "不支持回车!"
        exit
    fi
    if [ $fs -gt 100  ];then
        echo "不支持100以上的数字"
    elif [ $fs -ge 80 ];then
        echo "优秀"
    elif [ $fs -ge 60 ];then
        echo "及格"
    else
        echo "补考"
    fi
    
    
    
    多条件
    
    
    [root@web /scripts/day04]# cat fenshu.sh
    #!/bin/bash
    read  -p  "请输入一个分数:" fs
    
    expr $fs + 1  &>/dev/null
    if [ ! $? -eq 0 ];then
            echo  "请输入一个整数!"
            exit
    fi
    
    if [ -z $fs ];then
        echo "不支持回车!"
        exit
    fi
    if [ $fs -ge 0 -a $fs -lt 60 ];then
        echo "补考"
    elif [ $fs -ge 60 -a $fs -lt 80 ];then
        echo "及格"
    elif [ $fs -ge 80 -a $fs -le 100 ];then
        echo "优秀"
    else
        echo "只支持0-100的数字"
    fi
    

    18.写一个创建用户的脚本,需要输入创建用户的前缀,比如oldboy,以及后缀。比如123。

    提示用户输入要创建的用户的前缀,且必须是字母
    
    提示用户输入要创建的用户的后缀。且必须是数字
    
    将前缀和后缀进行结合
    
    在判断用户是否存在,存在则提示
    
    不存在,则创建
    
    [root@web /scripts/day04]# cat  if-2.sh
    #!/bin/bash
    read -p "请输入创建用户的前缀(字母):" qz
    
    if [ -z $qz ];then
        echo "不支持回车!"
        exit
    fi
    if [[ ! $qz =~ ^[a-Z]+$ ]];then
        echo "请输入字母!"
        exit
    fi
    read -p  "请输入创建用户的后缀(整数):" hz
    
    if [ -z $hz ];then
        echo "不支持回车!"
        exit
    fi
    if [[ ! $hz =~ ^[0-9]+$ ]];then
        echo "请输入一个整数!"
        exit
    fi
    
    User=${qz}${hz}
    
    id  $User  &>/dev/null
    
    if [ $? -eq 0 ];then
        echo "用户${User}已经存在"
    else
        useradd  $User  &>/dev/null
        if [ $? -eq 0 ];then
            echo "用户$User 创建成功!"
        else
            echo "用户$User 创建失败!"
            exit
        fi
    fi
    

    19.使用root用户清空/var/log/messages日志,并每次执行保留最近100行

    1.root用户执行  $USER    $UID  
    
    2.判断文件是否存在  
    
    3.保留最近100行文件
    
    [root@web /scripts/day04]# cat if-3.sh
    #!/bin/bash
    #1.判断是否是root用户
    if [ ! $USER == "root"  -a  ! $UID -eq 0 ];then
        echo "该用户$USER 对此脚本$0 没有执行权限!"
        exit
    fi
    File=/var/log/messages
    if [ ! -f  $File ];then
        echo "$FIle 文件不存在!"
        exit
    fi
    if [ ! -s $File ];then
        echo "文件存在,但是文件中没有任何内容!"
        exit
    fi
    #2.清空并保留最近100行内容
    
    tail -100  $File >${File}.bak  && cat  ${File}.bak >$File 
    
    if [ $? -eq 0 ];then
        echo "日志清空成功!并保留了最近100行内容!"
        rm -f  ${File}.bak
    else
        echo "清空操作失败!"
    fi
    
    [root@web /scripts/day04]# cat if-3.sh
    #!/bin/bash
    #1.判断是否是root用户
    if [ $USER == "root"  -a  $UID -eq 0 ];then
        File=/var/log/messages
        if [ -f  $File ];then
            if [ -s $File ];then
                tail -100  $File >${File}.bak  && cat  ${File}.bak >$File 
                if [ $? -eq 0 ];then
                    echo "日志清空成功!并保留了最近100行内容!"
                    rm -f  ${File}.bak
                else
                    echo "清空操作失败!"
                fi
            else
                echo "文件存在,但是文件中没有任何内容!"
                exit
            fi
        else
            echo "$FIle 文件不存在!"
            exit
        fi
    else
        echo "该用户$USER 对此脚本$0 没有执行权限!"
        exit
    fi
    

    20.判断某个服务是否正常启动

    位置变量  $1  
    
    判断用户是否执行脚本时加了位置变量
    
        是否运行
        端口是否存在
        进程是否存在
    
    systemctl  status  $1  
    
    netstat  -lntup  |grep  $1
    
    ps  aux|grep  $1  |grep  -v   grep   
    
    [root@web /scripts/day04]# cat if-5.sh 
    #!/bin/bash
    if [ $# -ne 1 ];then
        echo "请输入一个位置变量。"
        echo "Usage: $0 {sshd|nginx|php-fpm|rsync|mariadb}"
        exit
    fi
    Server=$1
    if [ $Server == "mariadb" ];then
        Server=mysqld
    fi
    #1.判断服务是否运行
    systemctl  status  $Server  &>/dev/null
    
    Rc=$?
    
    if [ $Rc -eq 0 ];then
        echo "服务$Server 正在运行....."
    elif [ $Rc -eq 4 ];then
        echo "没有$Server 这个服务!"
        exit
    elif [ $Rc -eq 3 ];then
        echo "服务$Server 没有运行..."
    else
        echo "你输入的服务名称不正确!"
    fi
    
    #2.判断端口号是否存在
    netstat  -lntup  |grep  $Server  &>/dev/null
    
    if  [ $? -eq 0 ];then
        echo  "服务$Server 端口号存在!"
    else
        echo  "服务$Server 端口号不存在!"
    fi
    
    #3.判断进程是否存在
    
    ps  aux |grep  $Server  | grep -v  grep  |grep -v  'pts'  &>/dev/null
    
    if  [ $? -eq 0 ];then
        echo  "服务$Server 进程存在!"
    else
        echo  "服务$Server 进程不存在!"
    fi
    

    21.根据不同的系统进行安装不同的yumy源,Centos6和Centos7

    [root@web /scripts/day05]# cat  yum.sh 
    #!/bin/bash
    Version=$(awk  '{print $(NF-1)}'  /etc/redhat-release)
    
    if [ ${Version%%.*} -eq 6 ];then
        rm  -rf  /etc/yum.repos.d/*  &>/dev/null
        if [ $? -eq 0 ];then
            echo  "操作系统6系列的旧有的yum备份完毕!"
            echo  "开始更新Base源....."
            curl -s  -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Base更新成功!"
                echo "开始更新Epel源....."
                curl -s  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo  &>/dev/null
                if [ $? -eq 0 ];then
                    echo "Epel源更新成功!"
                else
                    echo "Epel源更新失败!"
                fi
            else
                echo  "Base更新失败!"
            fi
        else
            echo  "操作系统6系列的旧有的yum备份失败!"
            exit
        fi
    elif [ ${Version%%.*} -eq 7 ];then
        rm  -rf  /etc/yum.repos.d/*  &>/dev/null
        if [ $? -eq 0 ];then
            echo  "操作系统7系列的旧有的yum备份完毕!"
            echo  "开始更新Base源....."
            curl -s  -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  &>/dev/null
            if [ $? -eq 0 ];then
                echo "Base更新成功!"
                echo "开始更新Epel源....."
                curl -s  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  &>/dev/null
                if [ $? -eq 0 ];then
                    echo "Epel源更新成功!"
                else
                    echo "Epel源更新失败!"
                fi
            else
                echo  "Base更新失败!"
            fi
        else
            echo  "操作系统7系列的旧有的yum备份失败!"
            exit
        fi
    else
        echo "没有该系统版本的yum源!"
        exit
    fi
    

    22.rsync启动脚本

    思路
    启动  /usr/bin/rsync --daemon
    
    停止  pkill  rsync
    
    状态  
    
    创建一个pid文件
    
    [root@web /scripts/day05]# cat case-3.sh    
    #!/bin/bash
    [ -f /etc/init.d/functions ] && source /etc/init.d/functions
    if [ $# -ne 1 ];then
        echo "请输入一个参数。"
        echo "Usage: $0 {start|stop|restart|status}"
        exit
    fi
    Pid=/var/run/rsync.pid
    case $1 in
        start)
                if [ -f $Pid ];then
                    action "Rsync服务正在运行...." /bin/true
                else
                    touch  $Pid  &>/dev/null && /usr/bin/rsync --daemon  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Rsync服务启动成功!"  /bin/true
                    else
                        action "Rsync服务启动失败!"  /bin/false
                        rm -f $Pid  &>/dev/null
                        exit
                    fi
                fi
                ;;
        stop)
                if [ -f $Pid ];then
                    rm -f  $Pid  &>/dev/null
                    pkill  rsync  &>/dev/null  || pkill  rsync  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Rsync服务停止成功!"  /bin/true
                    else
                        action "Rsync服务停止失败!"  /bin/false
                    fi
                else
                    action "Rsync没有运行....." /bin/true
                fi
                ;;
        restart)
                if [  -f $Pid ];then
                    rm -f  $Pid  &>/dev/null
                    pkill  rsync  &>/dev/null  || pkill  rsync  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Rsync服务停止成功!"  /bin/true
                    else
                        action "Rsync服务停止失败!"  /bin/false
                    fi
                    sleep 3
                    touch  $Pid  &>/dev/null && /usr/bin/rsync --daemon  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Rsync服务启动成功!"  /bin/true
                    else
                        action "Rsync服务启动失败!"  /bin/false
                        rm -f $Pid  &>/dev/null
                        exit
                    fi
                else
                    action "Rsync没有运行....." /bin/true
                    touch  $Pid  &>/dev/null && /usr/bin/rsync --daemon  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Rsync服务启动成功!"  /bin/true
                    else
                        action "Rsync服务启动失败!"  /bin/false
                        exit
                    fi
                fi
                ;;
        status)
                if [ -f $Pid ];then
                    action "Rsync服务正在运行....."  /bin/true
                else
                    action "Rsync服务没有运行....."  /bin/true
                fi
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
                exit
    esac
    

    23.nginx启动脚本

    启动   /usr/sbin/nginx
    
    停止  /usr/sbin/nginx   -s  stop
    
    平滑重启  /usr/sbin/nginx   -s  reload    服务在运行才能平滑重启 
    
    重启  restart     当ip地址改变  
    
    [root@web /scripts/day05]# cat nginx.sh
    #!/bin/bash
    [ -f /etc/init.d/functions ]  &&  source /etc/init.d/functions
    
    #加锁机制
    suo=/opt/nginx.txt
    if [ -f $suo ];then
        echo "此脚本正在使用......"
        exit
    fi
    
    if [ ! $USER == "root" -a ! $UID -eq 0 ];then
        echo "该用户$USER 对此脚本$0 没有执行权限"
        exit
    fi
    if [ $# -ne 1 ];then
        echo "请输入一个参数!"
        echo "Usage: $0 {start|stop|restart|status}"
        exit
    fi
    touch $suo  &>/dev/null
    Pid=/var/run/nginx.pid
    case $1 in
        start)
               if [ -f $Pid ];then
                   action "Nginx服务正在运行......"  /bin/true
               else
                   /usr/sbin/nginx  &>/dev/null
                   if [ $? -eq 0 ];then
                       action "Nginx服务启动成功......"  /bin/true
                   else
                       action "Nginx服务启动失败......" /bin/false
                   fi
               fi
               ;;
        stop)
                if [ -f $Pid ];then
                    /usr/sbin/nginx -s stop &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务停止成功......"  /bin/true
                    else
                        action "Nginx服务停止失败......"  /bin/false
                    fi
                else
                    action "Nginx服务没有运行......."  /bin/true
                fi
                ;;
        reload)
                if [ -f $Pid ];then
                    /usr/sbin/nginx -s  reload  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx重载成功....."  /bin/true
                    else
                        action "Nginx重载失败....."  /bin/false
                    fi
                else
                    action "Nginx服务没有运行!无法进行重载操作!"  /bin/false
                fi
                ;;
        status)
                if [ -f $Pid ];then
                    action "Nginx服务正在运行......"  /bin/true
                else
                    action "Nginx服务没有运行......"  /bin/true
                fi
                ;;
        restart)
                if [ -f $Pid ];then
                    /usr/sbin/nginx -s stop &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务停止成功....."  /bin/true
                    else
                        action "Nginx停止失败....."  /bin/false
                    fi
                    sleep 3
                    /usr/sbin/nginx &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务启动成功......" /bin/true
                    else
                        action "Nginx服务启动失败......"  /bin/false
                    fi
                else
                    action "Nginx服务没有运行....."  /bin/true
                    /usr/sbin/nginx &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务启动成功......" /bin/true
                    else
                        action "Nginx服务启动失败......"  /bin/false
                    fi
                fi
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
    esac
    
    rm -f  $suo  &>/dev/null
    
    
    高级版nginx启动脚本
    
    [root@web /scripts/day05]# cat  nginx.sh 
    #!/bin/bash
    [ -f /etc/init.d/functions ]  &&  source /etc/init.d/functions
    
    #加锁机制
    suo=/opt/nginx.txt
    if [ -f $suo ];then
        echo "此脚本正在使用......"
        exit
    fi
    
    if [ ! $USER == "root" -a ! $UID -eq 0 ];then
        echo "该用户$USER 对此脚本$0 没有执行权限"
        exit
    fi
    if [ $# -ne 1 ];then
        echo "请输入一个参数!"
        echo "Usage: $0 {start|stop|restart|status}"
        exit
    fi
    touch $suo  &>/dev/null
    Pid=/var/run/nginx.pid
    case $1 in
        start)
               if [ -f $Pid ];then
                   action "Nginx服务正在运行......"  /bin/true
               else
                   /usr/sbin/nginx -t  &>/dev/null
                   if [  $? -eq 0 ];then
                        /usr/sbin/nginx  &>/dev/null
                        if [ $? -eq 0 ];then
                            action "Nginx服务启动成功......"  /bin/true
                        else
                            action "Nginx服务启动失败......" /bin/false
                        fi
                    else
                        Err=/opt/nginx_err.log
                        /usr/sbin/nginx -t &>$Err
                        Nginx_Err_File=$(awk -F  '[ :]'  'NR==1{print $(NF-1)}'  $Err )
                        Nginx_Err_Line=$(awk -F  '[ :]'  'NR==1{print $NF}'  $Err )
                        echo "Nginx语法检查错误!在$Nginx_Err_File 文件中,在$Nginx_Err_Line 行。"
                        cat  $Err 
                        read -p "是否进入该文件进行修改[Y|N]:"  qr
                        case $qr  in
                            Y|Yes|yes|y)
                                        vim  +$Nginx_Err_Line $Nginx_Err_File
                                        /usr/sbin/nginx -t  &>/dev/null
                                        if [  $? -eq 0 ];then
                                            /usr/sbin/nginx  &>/dev/null
                                            if [ $? -eq 0 ];then
                                                action "Nginx服务启动成功....."  /bin/true
                                            else
                                                action "Nginx服务启动失败....."  /bin/false
                                            fi
                                        else
                                            echo "语法还是错误!继续加油修改!"
                                        fi
                                        ;;
                            N|No|no|n)
                                        echo "你选择自己手动修改!"
                                        ;;
                            *)
                                        echo "你输入的不正确,请输入[Y|N]。"
                        esac
                   fi
               fi
               ;;
        stop)
                if [ -f $Pid ];then
                    /usr/sbin/nginx -s stop &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务停止成功......"  /bin/true
                    else
                        action "Nginx服务停止失败......"  /bin/false
                    fi
                else
                    action "Nginx服务没有运行......."  /bin/true
                fi
                ;;
        reload)
                if [ -f $Pid ];then
                    /usr/sbin/nginx -s  reload  &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx重载成功....."  /bin/true
                    else
                        action "Nginx重载失败....."  /bin/false
                    fi
                else
                    action "Nginx服务没有运行!无法进行重载操作!"  /bin/false
                fi
                ;;
        status)
                if [ -f $Pid ];then
                    action "Nginx服务正在运行......"  /bin/true
                else
                    action "Nginx服务没有运行......"  /bin/true
                fi
                ;;
        restart)
                if [ -f $Pid ];then
                    /usr/sbin/nginx -s stop &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务停止成功....."  /bin/true
                    else
                        action "Nginx停止失败....."  /bin/false
                    fi
                    sleep 3
                    /usr/sbin/nginx &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务启动成功......" /bin/true
                    else
                        action "Nginx服务启动失败......"  /bin/false
                    fi
                else
                    action "Nginx服务没有运行....."  /bin/true
                    /usr/sbin/nginx &>/dev/null
                    if [ $? -eq 0 ];then
                        action "Nginx服务启动成功......" /bin/true
                    else
                        action "Nginx服务启动失败......"  /bin/false
                    fi
                fi
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
    esac
    
    rm -f  $suo  &>/dev/null
    
    #!/bin/bash
    [ -f /etc/init.d/functions ] && . /etc/init.d/functions
    
    ZT=$1
    PID=/var/run/nginx.pid
    State () {
        if [ $? -eq 0 ];then
            action "nginx 服务 $ZT 成功" /bin/true
        else
            action "nginx 服务 $ZT 失败" /bin/false
        fi
    }
    Start () {
        if [ -f $PID ];then
            action "nginx 启动中" /bin/true
        else
            /usr/sbin/nginx &>/dev/null
            ZT=start
            State
        fi
    }
    Stop () {
        if [ -f $PID ];then
            action "nginx 启动失败" /bin/true
        else
            /usr/sbin/nginx -s stop &>/dev/null
            ZT=stop
            State
        fi
    }
    Reload ()  {
        if [ -f $PID ];then
            action "nginx 启动中" /bin/true
        else
            /usr/sbin/nginx -s reload &>/dev/null
            echo "正在加载中"
        fi
    }
    Status () {
        if [ -f $PID ];then
            action "nginx 启动中" /bin/true
        else
            action "nginx 没启动" /bin/false
        fi
    }
    case $ZT in
        start)
            Start
            State
            ;;
        stop)
            Stop
            State
            ;;
        restart)
            Stop
            sleep 2
            Start
            ;;
        status)
            Status
            ;;
        *)
            echo "你输入的不对!"
            exit
    esac
    

    相关文章

      网友评论

          本文标题:shell练习题

          本文链接:https://www.haomeiwen.com/subject/qbvebctx.html