zoukankan      html  css  js  c++  java
  • Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程

    分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使用switch ... case格式,但是在Shell却没有switch ... case,不过别担心,Shell是支持分支语句的,只不过使用case ... esac格式而已。二者在本质上是相同的。

    Shell分支case

    一、Shell分支语句case···esac语法

    case 值 in
    模式1)
        command1
        command2
        command3
        ;;
    模式2)
        command1
        command2
        command3
        ;;
    *)
        command1
        command2
        command3
        ;;
    esac

    说明:case后为取值,值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束。

    值可以为变量或常数。

    模式支持正则表达式,可以用以下字符:

    *       任意字串
    ?       任意字元
    [abc]   a, b, 或c三字元其中之一
    [a-n]   从a到n的任一字元
    |       多重选择

    匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

    ;; 与其他语言中的 break 类似,意思是不执行接下来的语句而是跳到整个 case 语句的最后。

    *)与default相似,如果上面没有匹配到的模式,则执行*)里的内容。

    二、Shell分支语句case···esac使用举例

    通过一个例子来学习下case…esac命令:

    #!/bin/sh 
    #auther:linuxdaxue.com
    #date:2016-05-30
    case $1 in
    start | begin)
        echo "I am started!"  
        ;;
    stop | end)
        echo "I am stopped!"  
        ;;
    *)
        echo "Other command!"  
        ;;
    esac

    说明:这个脚本练习的是模式匹配,模式匹配支持‘|’符,有一个条件符合就会执行命令。

    输出:

    $./test.sh start
    I am started!
    $./test.sh stop
    I am stopped!
    $./test.sh begin
    I am started!
    $/test.sh hello
    Other command!

    接下来给大家演示一个通过case…esac语句产生菜单的例子:

    #!/bin/bash  
    #Author:linuxdaxue.com
    #Date:2016-05-30
    #Desc:Shell case菜单练习
    
    clear # 清屏.  
    
    echo "          Contact List"  
    echo "          ------- ----"  
    echo "Choose one of the following persons:"  
    echo  
    echo "[E]vans, Roland"  
    echo "[J]ones, Mildred"  
    echo "[S]mith, Julie"  
    echo "[Z]ane, Morris"  
    echo  
    
    read person  
    
    case "$person" in  
    # 注意, 变量是被""引用的.  
    
    "E" | "e" )  
    # 接受大写或者小写输入.  
    echo  
    echo "Roland Evans"  
    echo "4321 Floppy Dr."  
    echo "Hardscrabble, CO 80753"  
    echo "(303) 734-9874"  
    echo "(303) 734-9892 fax"  
    echo "revans@zzy.net"  
    echo "Business partner & old friend"  
    ;;  
    # 注意, 每个选项后边都要以双分号;;结尾.  
    
    "J" | "j" )  
    echo  
    echo "Mildred Jones"  
    echo "249 E. 7th St., Apt. 19"  
    echo "New York, NY 10009"  
    echo "(212) 533-2814"  
    echo "(212) 533-9972 fax"  
    echo "milliej@loisaida.com"  
    echo "Ex-girlfriend"  
    echo "Birthday: Feb. 11"  
    ;;  
    
    # 后边的 Smith 和 Zane 的信息在这里就省略了.  
    
    * )  
    # 默认选项.  
    # 空输入(敲回车RETURN), 也适用于这里.  
    echo  
    echo "Not yet in database."  
    ;;  
    
    esac  
    
    echo  
    
    #  练习:  
    #  -----  
    #  修改这个脚本, 让它能够接受多个输入,  
    #+ 并且能够显示多个地址.  
    
    exit 0

    说明:这个例子主要为大家演示了如何用case…esac语句产生菜单,让大家可以更形象、灵活的来学习case…esac语句的用法。

    输出:

    Contact List
              ------- ----
    Choose one of the following persons:
    
    [E]vans, Roland
    [J]ones, Mildred
    [S]mith, Julie
    [Z]ane, Morris
    
    E
    
    Roland Evans
    4321 Floppy Dr.
    Hardscrabble, CO 80753
    (303) 734-9874
    (303) 734-9892 fax
    revans@zzy.net
    Business partner & old friend

    上面是输入E参数的输出,输入S或者Z,则会输出如下:

    Contact List
              ------- ----
    Choose one of the following persons:
    
    [E]vans, Roland
    [J]ones, Mildred
    [S]mith, Julie
    [Z]ane, Morris
    
    Z
    
    Not yet in database.

    好了,关于Shell中分支语句case…esac的用法就先为大家介绍到这里,case…esac是一个非常强大的命令,大家可以用其来做非常多的事情,这篇文章仅仅只是入门作用,更多的需要大家在实际使用中多多尝试,多多练习。

    更多Linux Shell教程请看:Linux Shell系列教程

  • 相关阅读:
    spark foreachPartition
    spark mapPartition
    spark union intersection subtract
    spark join 类算子
    spark action 算子
    卷展栏模板
    锁定/解锁
    3D一些提示信息
    文件对话框多选
    吸取属性
  • 原文地址:https://www.cnblogs.com/waitig/p/5868332.html
Copyright © 2011-2022 走看看