Chinaunix首页 | 论坛 | 博客
  • 博客访问: 133793
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 174
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-30 10:35
文章分类

全部博文(18)

文章存档

2016年(1)

2015年(13)

2014年(4)

我的朋友

分类: 嵌入式

2015-09-25 01:58:57

case语句:它能够把变量的内容与多个模板进行匹配,在根据成功匹配的模板去决定应该执行哪部分代码。
使用格式:
case 匹配母板 in
模板1[|模板2]...)语句组;;
模板3)语句组;;
...
*) 语句组;;
esac
case语句的匹配是从上往下地匹配顺序,因此case语句编写原则也是从上往下,模板从特殊到普通。另外在shell程序设计中,可以将模板写成*)就能完成C语言中case语句中的default模板的功能。
例1
  1. getyn()
  2. {
  3. while echo "enter y/n :"
  4. do
  5. read yn
  6. case $yn in
  7. [Yy]) return 0 ;; //必须以双分号结束;另外[]是专门针对单字符的值,这里的[Yy],就是Y和y之一
  8. yes) return 0 ;;
  9. YES) return 0 ;;
  10. [Nn]) return 1 ;;
  11. no) return 1;;
  12. NO) return 1;;
  13. * ) echo "only acceptY,y,N,n,YES,yes,NO,no";; //*)表示其他值、default的意思
  14. esac
  15. done
  16. }
  17. if
  18. getyn //调用函数,以函数作为if条件
  19. then // 注意0为真
  20. echo " your answer is yes"
  21. else
  22. echo "your anser is no"
  23. fi

if,case,匹配字符串最常见,但如何匹配一段很长的输出,一堆文字?最好方法,用“*”,如:*"command not found"*
例2
  1. 编写脚本
  2. [macg@machome ~]$ vi test.sh
  3. var=$(ls -l $1) $()取命令输出,$1是命令行参数,执行时传入
  4. echo "output is $var"
  5. case $var in
  6. "-rw-rw-r--"*) echo "this is not a execute file";;   //注意*在双引号外边
  7. "-rwxrwxr-x"*) echo "this is a execute file";
  8. esac

  9. 执行脚本
  10. [macg@machome ~]$ sh test.sh 22.txt
  11. output is -rw-rw-r-- 1 macg macg 15 Jun 9 19:00 22.txt
  12. this is not a execute file
  13. [macg@machome ~]$ chmod +x 22.txt
  14. [macg@machome ~]$ sh test.sh 22.txt
  15. output is -rwxrwxr-x 1 macg macg 15 Jun 9 19:00 22.txt
  16. this is a execute file

例3
  1. 编写脚本
  2. # vi test.sh
  3. :
  4. echo "input : "
  5. read num       //接收输入
  6. echo "the input data is $num"
  7. case $num in
  8. 1) echo "January";; 双分号结束
  9. 2) echo "Feburary";;
  10. 5) echo "may" 每个case可以有多条命令
  11. echo "sdfd"
  12. echo "sdf";; 但最后一条命令一定是双分号结束
  13. *) echo "not correct input";; *)是其他值、default的意思
  14. esac
  15.  
  16. 执行脚本
  17. # sh ./test.sh
  18. input :
  19. 2
  20. the input data is 2
  21. Feburary
  22. # sh ./test.sh
  23. input :
  24. ter
  25. the input data is ter
  26. not correct input 

参考资料:http://blog.chinaunix.net/uid-26557245-id-3424501.html
                http://blog.sina.com.cn/s/blog_6151984a0100ekq0.html
阅读(1883) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~