• shell编程之case语句


    shell编程之case语句

    1.case语句的用途用语法

    case 结构条件句相当于多分支的if/elif/else条件句,但是它比这些条件语句看起来更规范工整,常被用于实现系统服务启动脚本等企业

    case语法
    case 变量名 in
        值1)
            指令1
            ;;
        值2)
            指令2
            ;;
        值3)
            指令3
            ;;
        *)
            指令1
    esac
    

    1.1 case结构条件语句的执行流程

    1.2 case语句的使用总结

    1.case语句与if条件句的适用性
    case语句比较适合变量值较少且为固定的数字或字符串集合情况(非不确定的内容,例如范围),如果变量的值是已知固定的start/stop/restart等元素,那么采用case语实现就比较适合
    2.case语知与if语句的常见应用场景
    case主要是写服务的启动脚本,一般情况下,传参不同且具有少量的字符串,其适用范围窄
    if就是取值判断、比较、应用比case更广。几乎所有的case语句都可以用if条件语句实现
    3.case语句的优势与特点
    case语句就相当于多分支的if/elif/else语句,但case语句的优势是更规范、易读
    

    1.3 case语句案例

    1.3.1 执行shell脚本,打印一个如下的水果菜单:

    1.apple
    2.pear
    3.banana
    4.cherry
    当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色(随意),要求用case语句实现。
    [root@ci-node1 scripts]# cat 14.sh 
    #!/bin/bash
    ##############################################################
    # File Name: 14.sh
    # Version: V1.0
    # Author: liu
    # Organization: 
    # Created Time : 2019-04-13 11:41:33
    # Description:
    ##############################################################
    cat <<EOF
        1.apple
        2.pear
        3.banana
        4.cherry
    EOF
    read -p "请输入您的选择:" num
    red="33[31m"
    green="33[32m"
    yewllo="33[33m"
    blue="33[34m"
    tailer="33[0m"
    case $num in
        1)
            echo -e "$red apple $tailer"
            ;;
        2)
            echo -e "$green pear $tailer"  
            ;;
        3)
            echo -e "$yewllo banana $tailer" 
            ;;
        4)
            echo -e "$blue cherry $tailer"
            ;;
        *)
            echo "Usage:$0{1|2|3|4}"
            exit 1
    esac
    

    1.3.2 利用case语句开发Rsync服务启动停止脚本,本例采用case语句以及新的思路来实现

    [root@ci-node1 scripts]# cat rsync.sh 
    #!/bin/bash
    ##############################################################
    # File Name: rsync.sh
    # Version: V1.0
    # Author: liu
    # Organization: 
    # Created Time : 2019-04-13 12:13:32
    # Description:
    ##############################################################
    . /etc/init.d/functions
    #rsyncd进程号路径
    rsyncd_pid_path=/var/run/rsyncd.pid
    #创建锁文件
    lockfile=/var/lock/subsys/rsyncd
    start() {
        if [ ! -f $rsyncd_pid_path ]
        then
            rsync --daemon
            retval=$?
            if [ $retval -eq 0 ]
            then
                action "rsync is start ok" /bin/true
                touch $lockfile
                return $retval
            else
                action "rsync is start fail" /bin/false
                return $retval
            fi
        else
            echo "rsync in runing.."
        fi
    }
    stop() {
        if [ -f $rsyncd_pid_path ]
        then
            rsyncd_pid=`cat $rsyncd_pid_path`
            #判断进程是否存在
            if (kill -0 $rsyncd_pid &>/dev/null)
            then
                kill $rsyncd_pid
                retval=$?
                if [ $retval -eq 0 ]
                then
                    action "rsync is stop ok" /bin/true
                    rm -f $lockfile
                    return $retval
                else
                    action "rsync stop fail" /bin/false
                    return $retval
                fi
            fi
        else
            echo "$rsyncd_pid_path is not exist or rsyncd does not startup"
        fi
    }
    
    case $1 in
        start)
            start
            retval=$?
            ;;
        stop)
            stop
            retval=$?
            ;;
        restart)
            stop
            retval=$?
            sleep 1
            start
            retval=$?
            ;;
        *)
            echo "Usage:$0{start|stop|restart}"
            exit 1
    esac
    exit $retval
    

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    IDEA快捷键命令
    win命令
    jwt《token》
    批量注释与快速顶底部命令
    springboot邮通知553错误和
    git《一》
    twemproxy《一》
    reids在linux上的安装《四》
    linux安装jdk
    长沙和广州软件开发之我见
  • 原文地址:https://www.cnblogs.com/yjiu1990/p/10748227.html
Copyright © 2020-2023  润新知