Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15268
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-15 17:00
文章分类
文章存档

2014年(6)

我的朋友
最近访客

分类: LINUX

2014-10-04 20:37:22

欢迎转载,请注明原处,版权个人所有,不得用于商业用途,违者将追求起法律责任。  chengyaogen.blog.chinaunix.net
前面一节,我们在屏幕上画出了俄罗斯方块,现在我们让它动起来,呵呵,动起来...
思想就是通过改变x,y的坐标,在屏幕的不同地方绘制图形。
方法是通过方向键(A   S   D  W)来改变x,y的坐标。

先来看看shell中的信号处理吧

一、trap捕捉到信号之后,可以有三种反应方式

(1)执行一段程序来处理这一信号

(2)接受信号的默认操作

(3)忽视这一信号

二、trap对上面三种方式提供了三种基本形式

第一种形式的trap命令在shell接受到signal  list清单中数值相同的信号时,将执行双引号中的命令串。

trap 'commands' signal-list

trap "commands" signal-list

为了恢复信号的默认操作,使用第二种形式的trap命令:
trap signal-list

第三种形式的trap命令允许忽视信号
trap ""  signal-list

注意:

(1)对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储

(2)在trap中可以定义对信号0的处理(实际上没有这个信号),shell程序在其终止(如执行exit语句时) 发出该信号

(3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令

另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若commands是单引号括起来的话,那么shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体的值来替换。

  1. #!/bin/bash
  2. SigA=20
  3. SigS=21
  4. SigD=22
  5. SigW=23
  6. sig=0
  7. function Register_Signal()
  8. {
  9. trap "sig=$SigA;" $SigA
  10. trap "sig=$SigS;" $SigS
  11. trap "sig=$SigD;" $SigD
  12. trap "sig=$SigW;" $SigW
  13. }
  14. function Recive_Signal()
  15. {
  16. Register_Signal
  17. while true
  18. do
  19. sigThis=$sig
  20. case "$sigThis" in
  21. "$SigA")
  22. echo "A"
  23. sig=0
  24. ;;
  25. "$SigS")
  26. echo "S"
  27. sig=0
  28. ;;
  29. "$SigD")
  30. echo "D"
  31. sig=0
  32. ;;
  33. "$SigW")
  34. echo "W"
  35. sig=0
  36. ;;
  37. esac
  38. done
  39. }
  40. function Kill_Signal()
  41. {
  42. local sigThis
  43. while :
  44. do
  45. read -s -n 1 key
  46. case "$key" in
  47. "W"|"w")
  48. kill -$SigW $1
  49. ;;
  50. "S"|"s")
  51. kill -$SigS $1
  52. ;;
  53. "A"|"a")
  54. kill -$SigA $1
  55. ;;
  56. "D"|"d")
  57. kill -$SigD $1
  58. ;;
  59. "Q"|"q")
  60. kill -9 $1
  61. exit
  62. esac
  63. done
  64. }
  65. if [[ "$1" == "--show" ]]
  66. then
  67. Recive_Signal
  68. else
  69. bash $0 --show &
  70. Kill_Signal $!
  71. fi
这段shell脚本的功能是:按下A  S  D  W键会打印出对应的字母,按下 Q键退出
 

阅读(1099) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~