case的语法格式如下:
case var in
exp-1) 命令体1 ;;
exp-2) 命令体2 ;;
...
*) 命令体 ;;
shell通过计算变量var的值,将其结果依次和运算式exp-1, exp-2等进行比较,直到找到一个匹配的运算式为止。如果找到了匹配项,则执行它下面的命令直到遇到一对分号(;;)为止。
平时较小用case语句,偶尔用到,所以记录如下:
1> var可以是数字,也可以是字符串,只是在下面的判断运算式exp里区分就行
2> 判断运算式exp可以只是一个数字,或一字符串,也可以是一个运算式如$((a+b)) 其中a,b在上面已赋值,也可以是一个正则表达式
3> *即为当上面的判断运算式都匹配失败时才会执行它的命令体, 该项为可选
4> 一对分号可以跟在命令体最后一语句后,也可以写在命令体结束后的下一空行.作用相同
一段程序如下:
param=$1
a=11
b=12
echo "paramA="$param
case $param in
$((a+b))) echo "NO1"
param="dog" ;;
hello) echo "NO2"
param="cat";;
10) echo "NO3"
param="pig";;
*) echo "ERROR"
esac
echo "paramB="$param
接下来执行这段程序时,我可以分别带参数10 或 23 或 "hello" 看看结果打印的param的不同. 同时可以把
case......esac 这一段代码放在()中, 再分别执行后观察param的打印情况.在执行()中的代码时shell会创建一新的子进程,所以在子进程中的对param的修改并不会影响到父进程中的变量的值.
http://blog.csdn.net/edei2004/article/details/3693979