免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2998 | 回复: 10
打印 上一主题 下一主题

[文本处理] 如何将这个if脚本改为case脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-25 17:53 |只看该作者 |倒序浏览
if语句改为case语句,来简化脚本
  1. #!/bin/bash
  2. # --------------------------------------------
  3. # 按键产生的字符编码.
  4. arrowup='\[A'
  5. arrowdown='\[B'
  6. arrowrt='\[C'
  7. arrowleft='\[D'
  8. # --------------------------------------------

  9. SUCCESS=0
  10. OTHER=65

  11. echo -n "Press a key... "
  12. read -n3 key # 读3 个字符.

  13. echo -n "$key" | grep "$arrowup" #检查输入字符是否匹配.
  14. if [ "$?" -eq $SUCCESS ]
  15. then
  16. echo "Up-arrow key pressed."
  17. exit $SUCCESS
  18. fi

  19. echo -n "$key" | grep "$arrowdown"
  20. if [ "$?" -eq $SUCCESS ]
  21. then
  22. echo "Down-arrow key pressed."
  23. exit $SUCCESS
  24. fi

  25. echo -n "$key" | grep "$arrowrt"
  26. if [ "$?" -eq $SUCCESS ]
  27. then
  28. echo "Right-arrow key pressed."
  29. exit $SUCCESS
  30. fi

  31. echo -n "$key" | grep "$arrowleft"
  32. if [ "$?" -eq $SUCCESS ]
  33. then
  34. echo "Left-arrow key pressed."
  35. exit $SUCCESS
  36. fi

  37. echo " Some other key pressed."
  38. exit $OTHER
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-09-26 14:52 |只看该作者
  1. #!/bin/bash
  2. arrowup='\[A'
  3.     arrowdown='\[B'
  4.     arrowrt='\[C'
  5.     arrowleft='\[D'
  6.     # --------------------------------------------

  7.     SUCCESS=0
  8.     OTHER=65

  9.     echo -n "Press a key... "
  10.     read -n3 key # 读3 个字符.
  11.     case $key in
  12.         $arrowup)
  13.         echo "Up-arrow key pressed."
  14.         exit $SUCCESS;;
  15.         $arrowdown)
  16.         echo "Down-arrow key pressed."
  17.         exit $SUCCESS;;
  18.         $arrowrt)
  19.         echo "Right-arrow key pressed."
  20.         exit $SUCCESS;;
  21.         $arrowleft)
  22.         echo "Left-arrow key pressed."
  23.         exit $SUCCESS;;
  24.         *)
  25.         echo " Some other key pressed."
  26.         exit $OTHER;;
  27.       esac
  28. ~        
复制代码
看看是这样不?

论坛徽章:
0
3 [报告]
发表于 2012-09-26 17:29 |只看该作者
回复 2# yongsheng_2012
这个我也试过,错的,结果都是Some other key pressed.
麻烦你先运行一下


   

论坛徽章:
0
4 [报告]
发表于 2012-09-26 17:31 |只看该作者
回复 2# yongsheng_2012
key和arrowup,arrowdown,arrowrt,arrowleft不相等


   

论坛徽章:
0
5 [报告]
发表于 2012-09-29 17:05 |只看该作者
[root@yong tmp]# bash 1.sh
Press a key... \[A
Up-arrow key pressed.
[root@yong tmp]# bash 1.sh
Press a key... \[C
Right-arrow key pressed.
[root@yong tmp]#

还要我再说吗

论坛徽章:
0
6 [报告]
发表于 2012-10-26 11:18 |只看该作者
回复 5# yongsheng_2012
为毛我的上下左右键按出来跟你不一样呢?

[root@shell ~]# bash 1.sh
Press a key... ^[[A Some other key pressed.
[root@shell ~]# bash 1.sh
Press a key... ^[[C Some other key pressed.

   

论坛徽章:
0
7 [报告]
发表于 2012-10-26 11:21 |只看该作者
回复 5# yongsheng_2012


    还有你上面写的echo -n "Press a key... ",请问你下面的输出是怎么换的行?

论坛徽章:
0
8 [报告]
发表于 2012-10-27 20:56 |只看该作者
你自己输入有问题 ,^[[跟你说的\[到底哪个对

论坛徽章:
0
9 [报告]
发表于 2012-11-02 10:34 |只看该作者
回复 8# linjiecyd

麻烦你运行下脚本,在截个图给我看下~我换了系统,换了电脑,敲出来的结果还是一样~

我确保我的输入没问题


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
10 [报告]
发表于 2012-11-02 11:23 |只看该作者
好像我已经回答过你的问题了, http://bbs.chinaunix.net/thread-3772720-1-1.html

那个就是用case statement 的

注意: 1、"^[[A"为ctrl+v后按ESC 键 ,和 [ 和 A;
        2、"^[[B"为ctrl+v后按ESC 键 ,和 [ 和 B;
        3. 其他的类似
  1. #!/bin/bash
  2. #检查方向键
  3. #edited by xxt
  4. arrowup='^[[A'
  5. arrowdown='^[[B'
  6. arrowrt='^[[C'
  7. arrowleft='^[[D'
  8. insert='^[[2'
  9. delete='^[[3'

  10. echo -n "Press a key... "
  11. read -n3 key

  12. echo

  13. case $key in
  14.   "$arrowup")
  15.      echo "Up-arrow key is pressed"
  16.      ;;
  17.   "$arrowdown")
  18.      echo "Down-arrow key is pressed"
  19.      ;;
  20.   "$arrowrt")
  21.      echo "Right-arrow key is pressed"
  22.      ;;
  23.   "$arrowleft")
  24.      echo "Left-arrow key is pressed"
  25.      ;;
  26.   "$insert")
  27.      echo "Insert key is pressed"
  28.      ;;
  29.   "$delete")
  30.      echo "Delete key is pressed"
  31.      ;;
  32.   *)
  33.      echo "The args which you input is wrong"
  34.      ;;
  35. esac
  36. exit
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP