• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

Shell脚本编程学习——流程控制语句之Case语句【显哥出品,必为精品】

Shell编程 lixian 2年前 (2020-04-25) 300次浏览 0个评论 扫描二维码
文章目录[隐藏]

一、case语句格式

case语句主要就是程序的选择、循环等进行控制

case  $变量   in
	变量1)
		命令
		;;
	变量2)
		命令
		;;
	变量3)
		命令
		;;
	变量n)
		命令
		;;
	*)
		无匹配的变量序列
esac

二、Rsync启动脚本

1.脚本代码

[root@xian /server/scripts]# cat rsync_server.sh 
#!/bin/bash
# File Name: case_start_rsync.sh
# Author: lixian
#######################
#引用函数库
[ -f /etc/init.d/functions ] && source /etc/init.d/functions
#加锁
Suo=/tmp/rsync.block
if [ -f $Suo ];then
    action "此脚本正在运行,请稍后再执行!" /bin/false
    exit
fi
#判断执行脚本是否存在位置变量
if [ $# -ne 1 ];then
    action "请在脚本后输入对Rsync服务执行的参数!" /bin/false
    exit
fi
#创建锁
touch $Suo
#根据位置变量执行相对应的命令
Pid_File=/var/run/rsync.pid
case $1 in
    start)
        if [ -f $Pid_File ];then
            action "检测Rsync服务已经启动" /bin/true
        else
            #启动服务
            /usr/bin/rsync --daemon &>/dev/null && sleep 2
            if [ $? -eq 0 ];then
                action "Rsync服务启动成功!" /bin/true
                Pid=$(ps awx |grep rsync |awk 'NR==1{print $2}')
                echo $Pid > $Pid_File
            else
                action "Rsync服务启动失败!" /bin/false
            fi
        fi
        ;;
    stop)
        if [ -f $Pid_File ];then
            pkill rsync &>/dev/null && sleep 2
            if [ $? -eq 0 ];then
                action "Rsync服务停止成功!" /bin/true
                rm -f $Pid_File &>/dev/null
            else
                action "Rsync服务停止失败!" /bin/false
            fi
        else
            action "检测Rsync服务未运行!" /bin/false
        fi
        ;;
    status)
        if [ -f $Pid_File ];then
            action "检测Rsync服务已经启动!" /bin/true
        else
            action "Rsync服务没有运行!" /bin/true
        fi
        ;;
    restart)
        if [ -f $Pid_File ];then
            rm -f $Pid_File && pkill rsync &>/dev/null && sleep 2
            if [ $? -eq 0 ];then
                action "Rsync服务停止成功!" /bin/true
            else
                action "Rsync服务停止失败!" /bin/false
            fi
            /usr/bin/rsync --daemon &>/dev/null && sleep 2
            if [ $? -eq 0 ];then
                action "Rsync服务启动成功!" /bin/true
                Pid=$(ps awx |grep rsync |awk 'NR==1{print $2}')
            else
                action "Rsync服务启动失败!" /bin/false
            fi
        else
            action "检测服务Rsync未启动!" /bin/true
            /usr/bin/rsync --daemon &>/dev/null && sleep 2
            if [ $? -eq 0 ];then
                action "服务Rsync启动成功" /bin/true
                Pid=$(ps awx |grep rsync |awk 'NR==1{print $2}')
                echo $Pid > $Pid_File
            else
                action "服务Rsync启动失败!" /bin/false
            fi
        fi
        ;;
    *)
        action "您输入的参数不正确!" /bin/false
    esac
#解锁
rm -f $Suo

2.执行结果

Shell脚本编程学习——流程控制语句之Case语句【显哥出品,必为精品】

三、Nginx服务启动脚本

1.脚本代码

#!/bin/bash
# File Name: nginx_start.sh
# Author: lixian
#######################
#引用函数库
[ -f /etc/init.d/functions ] && source /etc/init.d/functions
#加锁
Suo=/tmp/nginx.lock
#判断是否存在锁机制
if [ -f $Suo ];then
    action "警告:此脚本有人正在执行!请稍后再执行!" /bin/false
    exit
fi
#判断执行脚本时的位置变量是否存在且唯一
if [ $# -ne 1 ];then
    action "请输入 start|restart|stop|status 参数!" /bin/false
    exit
fi
#创建锁
touch  $Suo
Pid_File=/var/run/nginx.pid
#编写case语句
case $1 in
    start)
        if [ -f $Pid_File ];then
            action "检测Nginx服务正在运行中!"  /bin/true
        else
            /usr/sbin/nginx -t &>/dev/null
            if [ $? -eq 0 ];then
                action "Nginx配置文件语法检查成功!" /bin/true
                /usr/sbin/nginx &>/dev/null && sleep 2
                if [ $? -eq 0 ];then
                    action "Nginx服务启动成功!" /bin/true
                else
                    action "Nginx服务启动失败!" /bin/false
                fi
            else
                Error=/tmp/nginx_error.log
                /usr/sbin/nginx -t &>$Error
                Nginx_File=$(awk  -F '[ :]' 'NR==1{print $(NF-1)}' $Error)
                Nginx_Line=$(awk  -F '[ :]' 'NR==1{print $NF}' $Error)
                /usr/sbin/nginx -t
                action  "Nginx配置文件语法检查失败!" /bin/false
                read -p  "配置文件为:${Nginx_File},错误的位置在第${Nginx_Line}行,是否进行配置修改[Yes|No]:" Confirm
                case $Confirm in
                    Yes|yes|y|Y)
                        vim +$Nginx_Line  $Nginx_File
                        /usr/sbin/nginx -t &>/dev/null
                        if [ $? -eq 0 ];then
                            action "Nginx配置文件语法检查成功!" /bin/true
                            /usr/sbin/nginx &>/dev/null && sleep 2
                            if [ $? -eq 0 ];then
                                action "Nginx服务启动成功!" /bin/true
                            else
                                action "Nginx服务启动失败!" /bin/false
                            fi
                        else
                            action "Nginx配置文件语法还是错误,请手动修改!" /bin/false
                        fi
                        ;;
                    No|no|N|n)
                        action "您拒绝了修改配置文件,这将导致Nginx服务不能启动!" /bin/true
                        ;;
                    *)
                        action "输入的内容不规范!输入修改或者不修改!" /bin/false
                esac
            fi
        fi
        ;;
    stop)
        if [ -f $Pid_File ];then
            /usr/sbin/nginx -s stop &>/dev/null && sleep 2
            if [ $? -eq 0 ];then
                action "Nginx服务停止成功!" /bin/true
            else
                action "Nginx服务停止失败!" /bin/false
            fi
        else
            action "Nginx服务未运行!" /bin/true
        fi
        ;;
    status)
        if [ -f $Pid_File ];then
            action "检测Nginx服务正在运行中!"  /bin/true
        else
            action "Nginx服务未运行!" /bin/true
        fi
        ;;
    restart)
        if [ -f $Pid_File ];then
            /usr/sbin/nginx -s stop &>/dev/null && sleep 2
            if [ $? -eq 0 ];then
                action "Nginx服务停止成功!" /bin/true
            else
                action "Nginx服务停止失败!" /bin/false
            fi
            /usr/sbin/nginx -t &>/dev/null
            if [ $? -eq 0 ];then
                action "Nginx配置文件语法检查成功!" /bin/true
                /usr/sbin/nginx &>/dev/null && sleep 2
                if [ $? -eq 0 ];then
                    action "Nginx服务启动成功!" /bin/true
                else
                    action "Nginx服务启动失败!" /bin/false
                fi
            else
                Error=/tmp/nginx_error.log
                /usr/sbin/nginx -t &>$Error
                Nginx_File=$(awk  -F '[ :]' 'NR==1{print $(NF-1)}' $Error)
                Nginx_Line=$(awk  -F '[ :]' 'NR==1{print $NF}' $Error)
                /usr/sbin/nginx -t
                action  "Nginx配置文件语法检查失败!" /bin/false
                read -p  "配置文件为:${Nginx_File},错误的位置在第${Nginx_Line}行,是否进行配置修改[Yes|No]:" Confirm
                case $Confirm in
                    Yes|y|Y)
                        vim +$Nginx_Line  $Nginx_File
                        /usr/sbin/nginx -t &>/dev/null
                        if [ $? -eq 0 ];then
                            action "Nginx配置文件语法检查成功!" /bin/true
                            /usr/sbin/nginx -s stop &>/dev/null && sleep 2
                            /usr/sbin/nginx &>/dev/null && sleep 2
                            if [ $? -eq 0 ];then
                                action "Nginx服务启动成功!" /bin/true
                            else
                                action "Nginx服务启动失败!" /bin/false
                            fi
                        else
                            action "Nginx配置文件语法还是错误,请手动修改!" /bin/false
                        fi
                        ;;
                    No|N|n)
                        action "您拒绝了修改配置文件,这将导致Nginx服务不能启动!" /bin/true
                        ;;
                    *)
                        action "输入的内容不规范!输入修改或者不修改!" /bin/false
                esac
            fi
        else
            action "Nginx服务未运行!" /bin/true
            /usr/sbin/nginx -t &>/dev/null
            if [ $? -eq 0 ];then
                action "Nginx配置文件语法检查成功!" /bin/true
                /usr/sbin/nginx &>/dev/null && sleep 2
                if [ $? -eq 0 ];then
                    action "Nginx服务启动成功!" /bin/true
                else
                    action "Nginx服务启动失败!" /bin/false
                fi
            else
                Error=/tmp/nginx_error.log
                /usr/sbin/nginx -t &>$Error
                Nginx_File=$(awk  -F '[ :]' 'NR==1{print $(NF-1)}' $Error)
                Nginx_Line=$(awk  -F '[ :]' 'NR==1{print $NF}' $Error)
                /usr/sbin/nginx -t
                action  "Nginx配置文件语法检查失败!" /bin/false
                read -p  "配置文件为:${Nginx_File},错误的位置在第${Nginx_Line}行,是否进行配置修改[Yes|No]:" Confirm
                case $Confirm in
                    Yes|y|Y)
                        vim +$Nginx_Line  $Nginx_File
                        /usr/sbin/nginx -t &>/dev/null
                        if [ $? -eq 0 ];then
                            action "Nginx配置文件语法检查成功!" /bin/true
                            /usr/sbin/nginx &>/dev/null && sleep 2
                            if [ $? -eq 0 ];then
                                action "Nginx服务启动成功!" /bin/true
                            else
                                action "Nginx服务启动失败!" /bin/false
                            fi
                        else
                            action "Nginx配置文件语法还是错误,请手动修改!" /bin/false
                        fi
                        ;;
                    No|N|n)
                        action "您拒绝了修改配置文件,这将导致Nginx服务不能启动!" /bin/true
                        ;;
                    *)
                        action "输入的内容不规范!输入修改或者不修改!" /bin/false
                esac
            fi
        fi
        ;;
    reload)
        if [ -f $Pid_File ];then
            /usr/sbin/nginx -t &>/dev/null
            if [ $? -eq 0 ];then
                action "Nginx配置文件语法检查成功!" /bin/true
                /usr/sbin/nginx -s reload  &>/dev/null  && sleep 2
                if [ $? -eq 0 ];then
                    action "Nginx服务平滑重启成功!"  /bin/true
                else
                    action "Nginx服务平滑重启失败!"  /bin/false
                fi
            else
                Error=/tmp/nginx_error.log                                                                                            
                /usr/sbin/nginx -t &>$Error
                Nginx_File=$(awk  -F '[ :]' 'NR==1{print $(NF-1)}' $Error)
                Nginx_Line=$(awk  -F '[ :]' 'NR==1{print $NF}' $Error)
                /usr/sbin/nginx -t
                action  "Nginx配置文件语法检查失败!" /bin/false
                read -p  "配置文件为:${Nginx_File},错误的位置在第${Nginx_Line}行,是否进行配置修改[Yes|No]:" Confirm
                case $Confirm in
                    Yes|y|Y)
                        vim +$Nginx_Line  $Nginx_File
                        /usr/sbin/nginx -t &>/dev/null
                        if [ $? -eq 0 ];then
                            action "Nginx配置文件语法检查成功!" /bin/true
                            /usr/sbin/nginx -s reload  &>/dev/null && sleep 2
                            if [ $? -eq 0 ];then
                                action "Nginx服务平滑重启成功!" /bin/true
                            else
                                action "Nginx服务平滑重启失败!" /bin/false
                            fi
                        else
                            action "Nginx配置文件语法还是错误,请手动修改!" /bin/false
                        fi
                        ;;
                    No|N|n)
                        action "您拒绝了修改配置文件,这将导致Nginx服务不能启动!" /bin/true
                        ;;
                    *)
                        action "输入的内容不规范!输入修改或者不修改!" /bin/false
                esac
            fi
        else
            action "检测Nginx服务未运行!不能进行平滑重启!" /bin/false
        fi
        ;;
    *)
        action "请输入 start|restart|stop|status 参数!" /bin/false
esac

#解锁
rm -f $Suo

2.执行结果

Shell脚本编程学习——流程控制语句之Case语句【显哥出品,必为精品】


本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:Shell脚本编程学习——流程控制语句之Case语句【显哥出品,必为精品】
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到