【现学现忘&Shell流程控制】— 45.case条件语句

1、case条件语句介绍

case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。

case语句语法如下:

case $变量名 in
    "值1")
        如果变量的值等于值1,则执行程序1
        ;;
    "值2")
        如果变量的值等于值2,则执行程序2
        ;;
    
    …省略其他分支…
    
    *)
        如果变量的值都不是以上的值,则执行此程序
        ;;
esac  (注:case的反写)

说明:

case语句和if…elif…else语句的区别:

case语句中只能判断一个条件(值),是否符合某一个情况(值),是一种判断。

if…elif…else语句,根据上一篇中的示例,我们可以看到if多分支条件语句,可以判断一个输入是否为空,是否是文件,是否是目录等多种条件关系,是不同的判断。

2、case语句需要注意的内容

  • case语句,会取出变量中的值,然后与语句体中的值逐一比较。

    如果数值符合,则执行对应的程序,如果数值不符,则依次比较下一个值。

    如果所有的值都不符合,则执行*)下的程序,*)代表所有其他值。

  • case语句以“case”开头,以“esac”结尾。

  • 每一个分支程序之后要通过;;双分号结尾,代表该程序段结束。

3、练习

示例1

#!/bin/bash 

# 请输入你需去往的城市
echo "want to beijing,please input 1."
echo "want to shanghai,please input 2."
echo "want to chendu,please input 3."

# 接收输入的信息,赋值给变量cho
read -t 30 -p "please input your choice: " cho 

# case条件判断
case $cho in 
    "1") 
        echo "to beijin"
        ;;
    "2")
        echo "to shanghai"
        ;;
    "3") 
        echo "to chendu"
        ;;
    *) 
        echo "error input"
        ;;
esac

示例2

把上一篇文章if多分支条件语句的计算机练习中,第三层if嵌套改成case语句实现。

#!/bin/bash
# 字符界面加减乘除计算器。

# 1.通过read命令接收要计算的数值,并赋予变量num1和num2
read -t 30 -p "Please input num1: " num1
read -t 30 -p "Please input num2: " num2

# 2.通过read命令接收要计算的符号,并赋予变量ope.
read -t 30 -p "Please input a operator: " ope

# 第一层判断
# 用来判断num1、num2和ope中都有值。
# -n选项:判断后边的字符串是否为空,非空为真。
# -a选项:逻辑与。
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
    then
        # 判断输入的num1和num2内容是否是纯数字 
        # 判断一个变量的内容是否是纯数字有很多方法,下面一种是简单好理解的。     
        # 定义变量test1和test2的值为$(命令)的结果。
        test1=$(echo $num1 | sed 's/[0-9]//g')
        test2=$(echo $num2 | sed 's/[0-9]//g')
        
        # 说明:
        # 就是通过sed命令,把变量num1值中的每一个字符,只要是0-9的内容,就替换为空。
        # 最后如果test1的值最后为空,证明num1变量中的内容全部为数字,因为全部被替换了。
        # 如果test1的值最后不为空,证明num1变量中的内容有非数字,即num1非纯数字。
        
        # 第二层判断,用来判断num1和num2为数值。
        # 如果变量test1和test2的值为空,则证明numl和num2是数字.
        # -z选项:判断字符串是否为空(为空返回真)
        # -a选项:逻辑与。
        if [ -z "$test1" -a -z "$test2" ]
            then
                # 如果test1和test2是数字,则执行以下命令。
                
                # 第三层判断用来确认运算符。
                # 确认变量$ope中是什么运算符。
                case $ope in 
                    "+") 
                        # 如果是加号则执行加法运算。
                        value=$(($num1+$num2))
                        ;;
                    "-")
                        # 如果是减号,则执行减法运算。
                        value=$(($num1-$num2))
                        ;;
                    "*")
                        # 如果是乘号,则执行乘法运算。
                        value=$(($num1*$num2))
                        ;;
                    "/") 
                        # 如果是除号,则执行除法运算。
                        value=$(($num1/$num2))
                        ;;
                        
                    *) 
                        # 如果运算符不匹配,提示输入有效的符号
                        echo "Please enter a valid symbol."
                        # 并退出程序,返回错误代码10。
                        exit 10
                        ;;
                esac        
        else
            # 如果test1和test2不为空,说明numl和num2不是数字。
            # 则提示输入有效的数值。
            echo "Please enter a valid value."
            # 并退出程序,返回错误代码11。
            exit 11
        fi

else 
    echo "qing input neirong."
    exit 12
fi 

# 输出数值运算的结果。
echo "$num1 $ope $num2 :$value"

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343