1. case语句
基本格式为:
case expression in
pattern1)
statement1
;;
pattern2)
statement2
;;
....
*)
statement
esac
expression即可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到expression的值就可以。
pattern可以是一个数字、一个字符串,甚至是一个简单的正则表达式。
运行过程:case会将expression的值与pattern1、pattern2…逐个进行匹配。如果expression和某个模式匹配,就会执行这个模式后面对应的所有语句,直到与减双分号;;才停止,然后整个case语句就执行完了,程序就会跳出整个case语句,执行esca后面的其它语句。如果expression没有匹配到任何一个模式,那么就执行*)后面的语句(*表示其它所有值),直到与减双分号;;或esca才结束。8)相当于if分置于句最后的else部分。
#!/bin/bash
echo "input integer number:"
read num
case $num in
1)
echo 'monday'
;;
2)
echo 'tuesday'
;;
3)
echo 'wednesday'
;;
4)
echo 'thursday'
;;
5)
echo 'friday'
;;
6)
echo 'saturday'
;;
7)
echo 'sunday'
;;
*)
echo 'error'
esac
结果:
input integer number:
2
tuesday
input integer number:
11
error
2. case-in和正则表达式
case in的pattern部分支持简单的正则表达式,具体来说,可以使用以下几种表达式:
格式 | 说明 |
---|---|
* | 表示任意字符串 |
[abd] | 表示a、b、c三个字符中的任意一个 |
[m-n] | 表示从m到n的任意一个字符 |
[0-9a-zA-Z] | 表示任意一个字母或数字 |
| | 表示多重选择,类四逻辑运算中的或运算。比如,abc |
#!/bin/bash
# -n 1:表示只读取一个字符,运行脚本后,只要用户输入一个字符,立即读取结束,不用等待按下回车键。
echo "input a character:"
read -n 1 char
case $char in
[a-zA-Z])
echo -e "\nletter"
;;
[0-9])
echo -e "\ndigit"
;;
[,.!?])
echo -e "\npunctuation"
;;
*)
echo -e "\nerror"
esac
结果:
input a character:
4
digit