zoukankan      html  css  js  c++  java
  • Shell入门-case条件语句

    Shell中case条件语句

    本篇主要包含:

    • case语句的格式及写法

    语法格式:

    case "arg1" in
     值1)
     	指令
     	;;
     值2)
     	指令
     	;;
     *)
     	指令
    esac
    

    实践1

    根据用户输入的数字做出响应,很类似Java中的switch case语法

    [root@localhost shell]# cat 9_1.sh 
    #!/bin/bash
    #***********************************************
    #Author:        luotianhao
    #Mail:          tianhao.luo@hand-china.com
    #Version:       1.0
    #Date:          2021-03-11
    #FileName:      9_1.sh
    #Description:   This is a test script.
    #***********************************************
    
    read -p "please input a number:" ans
    
    case "$ans" in
        1)
            echo "the num you input is 1"
            ;;
        2)
            echo "the num you input is 2"
            ;;
        [3-9])
            echo "the num you input is $ans"
            ;;
        *)
            echo "please input [0-9] int"
            exit;
    esac
    

    实践2

    打印特殊颜色:

    • echo -e可以识别转义字符,这里将识别特殊字符的含义,并输出。
    • E可以使用33替代。
    • “[1”数字1表示加粗显示(可以加不同的数字,以代表不同的意思,详细信息可用man console_codes获得)
    • 31m表示为红色字体,可以换成不同的数字,以代表不同的意思
    • “红色字oldboy”表示待设置的内容。
    • “[0m”表示关闭所有属性,可以换成不同的数字,以代表不同的意思。

    有关ANSI控制码的说明如下。

    • 33[0m 表示关闭所有属性。
    • 33[1m 表示设置高亮度。
    • 33[4m 表示下划线。
    • 33[5m 表示闪烁。
    • 33[7m 表示反显。
    • 33[8m 表示消隐。
    • 33[30m -- 33[37m 表示设置前景色。
    • 33[40m -- 33[47m 表示设置背景色
    [root@localhost shell]# echo -e "E[1;31m红色字oldboyE[0m"
    红色字oldboy
    [root@localhost shell]# echo -e "33[31m红色字oldboy33[0m"
    红色字oldboy
    

    加颜色的示例:

    [root@localhost shell]# cat plush_color.sh 
    #!/bin/bash
    #***********************************************
    #Author:        luotianhao
    #Mail:          tianhao.luo@hand-china.com
    #Version:       1.0
    #Date:          2021-03-11
    #FileName:      plush_color.sh
    #Description:   This is a test script.
    #***********************************************
    
    RED_COLOR='E[1;31m'
    GREEN_COLOR='E[1;32m'
    YELLOW_COLOR='E[1;33m'
    BLUE_COLOR='E[1;34m'
    #关闭所有属性
    RES='E[0m'
    
    echo -e "$RED_COLOR oldboy $RES"
    
    echo -e "$YELLOW_COLOR oldgirl $RES"
    

    当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色(随意),要求用case语句来实现。

    [root@localhost shell]# cat 9_2.sh 
    #!/bin/bash
    #***********************************************
    #Author:        luotianhao
    #Mail:          tianhao.luo@hand-china.com
    #Version:       1.0
    #Date:          2021-03-11
    #FileName:      9_2.sh
    #Description:   This is a test script.
    #***********************************************
    RED_COLOR='E[1;31m'
    GREEN_COLOR='E[1;32m'
    YELLOW_COLOR='E[1;33m'
    BLUE_COLOR='E[1;34m'
    
    RES='E[0m'
    
    echo '
      ==================================
      1.apple
      2.pear
      3.banana
      4.cherry
      ==================================
    '
    
    read -p "pls select a num:" num
    
    case "$num" in 
        1)
            echo -e "${RED_COLOR}apple${RES}"
            ;;
        2)
            echo -e "${GREEN_COLOR}pear${RES}"
            ;;
        3)
            echo -e "${YELLOW_COLOR}banana${RES}"
            ;;
        4)
            echo -e "${BLUE_COLOR}cherry${RES}"
            ;;
        *)
            echo "mus be {1|2|3|4}"
    esac
    

    使用cat来打印菜单

    [root@localhost shell]# cat 9_3.sh 
    #!/bin/bash
    #***********************************************
    #Author:        luotianhao
    #Mail:          tianhao.luo@hand-china.com
    #Version:       1.0
    #Date:          2021-03-11
    #FileName:      9_2.sh
    #Description:   This is a test script.
    #***********************************************
    RED_COLOR='E[1;31m'
    GREEN_COLOR='E[1;32m'
    YELLOW_COLOR='E[1;33m'
    BLUE_COLOR='E[1;34m'
    
    RES='E[0m'
    
    menu() {
    cat <<END
      ==================================
      1.apple
      2.pear
      3.banana
      4.cherry
      ==================================
    END
    }
    menu
    read -p "pls select a num:" num
    
    case "$num" in 
        1)
            echo -e "${RED_COLOR}apple${RES}"
            ;;
        2)
            echo -e "${GREEN_COLOR}pear${RES}"
            ;;
        3)
            echo -e "${YELLOW_COLOR}banana${RES}"
            ;;
        4)
            echo -e "${BLUE_COLOR}cherry${RES}"
            ;;
        *)
            echo "mus be {1|2|3|4}"
    esac
    

    将方法封装

    [root@localhost shell]# cat 9_4.sh 
    #!/bin/bash
    #***********************************************
    #Author:        luotianhao
    #Mail:          tianhao.luo@hand-china.com
    #Version:       1.0
    #Date:          2021-03-11
    #FileName:      9_2.sh
    #Description:   This is a test script.
    #***********************************************
    RED_COLOR='E[1;31m'
    GREEN_COLOR='E[1;32m'
    YELLOW_COLOR='E[1;33m'
    BLUE_COLOR='E[1;34m'
    
    RES='E[0m'
    
    function usage(){
      echo "USAGE: $0 {1|2|3|4}"
      exit 1
    }
    
    menu() {
    cat <<END
      ==================================
      1.apple
      2.pear
      3.banana
      4.cherry
      ==================================
    END
    }
    
    function chose(){
    
    read -p "pls select a num:" num
    
    case "$num" in 
        1)
            echo -e "${RED_COLOR}apple${RES}"
            ;;
        2)
            echo -e "${GREEN_COLOR}pear${RES}"
            ;;
        3)
            echo -e "${YELLOW_COLOR}banana${RES}"
            ;;
        4)
            echo -e "${BLUE_COLOR}cherry${RES}"
            ;;
        *)
            usage
    esac
    }
    
    function main(){
      menu
      chose
    }
    main
    
  • 相关阅读:
    VC++对话框笔记
    STL中用erase()方法遍历删除元素
    VC++中不小心选错工程类型的解决办法
    directX中常用的数学计算
    VC++中string、char* 转换为LPCSTR
    判断空间上点是否在直线上
    vc6.0插件
    VC++常用定义(如SAFE_DELETE等)
    关于控件的AutoSize属性影响界面布局的问题解决
    C#判断日期是否正确(1900~今年,月份,天数)
  • 原文地址:https://www.cnblogs.com/tianhao-luo/p/14533166.html
Copyright © 2011-2022 走看看