LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 601|回复: 3

请帮忙看看这段代码为什么错?

[复制链接]
发表于 2005-4-8 09:42:02 | 显示全部楼层 |阅读模式
  1. #!/bin/ksh
  2. function trap_exit
  3. {
  4. BREAK_OUT='Y'
  5. print -p $BREAK_OUT
  6. }

  7. function proc_watch
  8. {
  9. while :
  10. do
  11.         echo "1"
  12.         read $BREAK_OUT
  13.         if [[ $BREAK_OUT = 'Y' ]]
  14.         then
  15.                 return 0
  16.         fi
  17. done
  18. }

  19. trap 'trap_exit;exit 2' 1 2 3 15
  20. TOTAL_SECONDS=300
  21. BREAK_OUT='N'
  22. proc_watch |&
  23. PW_PID=$1
  24. until (( TOTAL_SECONDS == 0 ))
  25. do
  26.         (( TOTAL_SECONDs = TOTAL_SECONDS - 1 ))
  27.         sleep 1
  28. done
  29. Break_OUT='Y'
  30. print -p $BREAK_OUT
  31. kill $PW_PID
  32. exit 0
复制代码

运行后报错,
[root@localhost test]# sh 2.sh
2.sh: line 24: syntax error near unexpected token `&'
2.sh: line 24: `proc_watch |&'


另外,还想请问一下(( ))和[[ ]]的区别
发表于 2005-4-8 12:53:26 | 显示全部楼层
proc_watch |&
就是这句出错啦,应该是proc_watch &吧

(())是整数运算
[[]]是两个test的运算,
上面是基础知识,论坛里有详细的教程,请搜索


我觉得[[]]和一个test没什么区别,不知道其他兄弟知道别的用法吗?
回复 支持 反对

使用道具 举报

发表于 2005-4-8 15:01:28 | 显示全部楼层
Post by lksj
  1. #!/bin/ksh
  2. function trap_exit
  3. {
  4. BREAK_OUT='Y'
  5. print -p $BREAK_OUT
  6. }

  7. function proc_watch
  8. {
  9. while :
  10. do
  11.         echo "1"
  12.         read $BREAK_OUT
  13.         if [[ $BREAK_OUT = 'Y' ]]
  14.         then
  15.                 return 0
  16.         fi
  17. done
  18. }

  19. trap 'trap_exit;exit 2' 1 2 3 15
  20. TOTAL_SECONDS=300
  21. BREAK_OUT='N'
  22. proc_watch |&
  23. PW_PID=$1
  24. until (( TOTAL_SECONDS == 0 ))
  25. do
  26.         (( TOTAL_SECONDs = TOTAL_SECONDS - 1 ))
  27.         sleep 1
  28. done
  29. Break_OUT='Y'
  30. print -p $BREAK_OUT
  31. kill $PW_PID
  32. exit 0
复制代码

运行后报错,
[root@localhost test]# sh 2.sh
2.sh: line 24: syntax error near unexpected token `&'
2.sh: line 24: `proc_watch |&'


另外,还想请问一下(( ))和[[ ]]的区别

1,你用的是ksh,那么执行脚本的时候,就应该
ksh urscript
2,应为你用的是sh urscript,而|&是ksh一个co-process,出错,那是必然的!因为除了ksh的shell,都不支持co-process!
3,(())和[[]]没太多区别!一般来说(一个软性规定),(())用于test数字,[[]]用于比较字符,这样作的好处是便于阅读而已!当然,你用[[]]比较数字也没有人说你!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-11 10:17:02 | 显示全部楼层
OK,太感谢了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表