shell case in 条件结构

在C语言中,实现选择程序结构,除了使用if-else语句,还有另外一个选择:switch-case。在shell脚本中也是类似,除了使用if-else,也可以使用case in 来实现选择程序结构:

case $模式名 in
模式1)
    命令1
    ;;
模式2)
    命令2
    ;;
模式3)
    命令3
    ;;
*)
    其他条件下,这里的命令
esac

每个模式必须以右括号结束,双分号 ;; 类似于C语言中的break,在每个case分支后面添加;;,程序执行完每个分支后就停止执行,不继续往下执行了。整个case语句之后,使用esac结束。

编写一个脚本程序,用户输入1~12中的一个数字,脚本打印出对应的月份的英文单词:

#!/bin/bash

echo input month[1~12]:
read month

case $month in
1)
    echo January
    ;;
2)
    echo February
    ;;
3)
    echo March
    ;;
4)
    echo April
    ;;
5)
    echo May
    ;;
6)
    echo June
    ;;
7)
    echo July
    ;;
7)
    echo August
    ;;
8)
    echo September
    ;;
9)
    echo October
    ;;
10)
    echo November
    ;;
11)
    echo December
    ;;
12)
    echo Sunday
    ;;
*)
    echo input error
esac

脚本运行结果:

root@pc:/home/demo# ./hello.sh 
input month[1~12]:
2
February

root@pc:/home/demo# ./hello.sh 
input month[1~12]:
13
input error

case的每个选择分支中,可以是一个具体的值、字符串,甚至还可以是一个模式匹配表达式。如上面程序中的 * 就表示匹配任意值。

  • *:用来匹配任意字符
  • [1234]:匹配1、2、3、4数字中的任意一个
  • [1-12]:匹配1~12数字中的任意一个
  • 123|abc:匹配字符串123或abc

编写一个脚本程序,输入月份,打印出该月份对应的季节:

#!/bin/bash

echo input month[1~12]:
read month

case $month in
[1-3])
    echo Spring
    ;;
[4-6])
    echo Summer
    ;;
[7-9])
    echo Autumn
    ;;
10|11|12)
    echo Winter
    ;;
*)
    echo input error
esac

脚本运行结果:

root@pc:/home/demo# ./hello.sh 
input a[1~12]:
2
Spring
root@pc:/home/demo# ./hello.sh 
input a[1~12]:
12
Winter
root@pc:/home/demo# ./hello.sh 
input a[1~12]:
13
input error
《Linux三剑客》视频教程:Linux下开发工具vim、Git、Makefile、autotools、qemu、debug精讲,从零开始一步一步写项目的Makefile,提供企业级Makefile模板,Git操作实战,vim从新手到高手,一步一步打造类似Source Insight的IDE!详情点击:王利涛老师个人淘宝店:Linux三剑客