免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3488 | 回复: 8

[其他] 退不出的死循环 [复制链接]

论坛徽章:
0
发表于 2013-12-30 18:22 |显示全部楼层
按脚本的本意是,用户按了CTRL+C以后,调用r函数用户可以选择,1就退出,2就继续。现在的选择了1没有退出,问题出在那儿呢?
  1. b=2
  2. trap "ctrl_c" 2 20
  3. function ctrl_c()
  4. {
  5.         r
  6. }


  7. function r()
  8. {
  9.         read -e -p '1.exit 2.gono:  ' r
  10.         case $r in
  11.                 1)
  12.                         b=1
  13.                         a               
  14.                 ;;
  15.                 2)
  16.                         b=2
  17.                         a
  18.                 ;;
  19.         esac
  20. }


  21. function a()
  22. {
  23.         prompt="${b}_"
  24.         if [ $b -eq 1 ];then
  25.                 read  -e -p "$prompt> " command
  26.         else
  27.                 read  -e -p "$prompt> " command1
  28.                 command2=""
  29.                 i=1
  30.                 while [ 1 ]
  31.                 do
  32.                         read -e -p "  $i : " tmp
  33.                         command2="$command2 $tmp"
  34.                         if [ "${tmp:${#tmp}-1:1}"d == ';'d ];then
  35.                                 break
  36.                         fi
  37.                         let i++
  38.                 done            
  39.                 command="$command1 $command2"
  40.         fi                    
  41. }

  42. a
复制代码

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
发表于 2013-12-31 08:40 |显示全部楼层
没看到有 exit 命令

论坛徽章:
0
发表于 2013-12-31 09:15 |显示全部楼层
回复 2# openspace


    在“1.exit 2.gono:”提示时,理论上选择一就会进入,a函数的if分支才对,难道不是这样吗?

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
发表于 2013-12-31 09:33 |显示全部楼层
trap 触发的哪个func里面exit就好了

论坛徽章:
0
发表于 2013-12-31 09:38 |显示全部楼层
29行 下边不需要再读command吧?换成exit 试试

论坛徽章:
0
发表于 2013-12-31 11:23 |显示全部楼层
回复 5# 风影刃


    读完read就应该退出a函数才对呀。

论坛徽章:
0
发表于 2013-12-31 11:52 |显示全部楼层
是一个嵌套问题吧,你是先执行的a函数,b=2,在一个while 的死循环里,然后ctrl-c,调用那个1或2选项的函数,read完结束函数,没有break,继续死循环,并没有退出while的死循环回复 6# mfkwwgi


   

论坛徽章:
0
发表于 2013-12-31 11:59 |显示全部楼层
本帖最后由 mfkwwgi 于 2013-12-31 12:06 编辑

回复 7# 风影刃


    如果选择了1,就read就退出if,就退出了a函数。何来死循环?
难道不在这个read了,我试过exit是可以退出的。但是为了功能需要需要在这个地方read一次。

论坛徽章:
0
发表于 2013-12-31 12:11 |显示全部楼层
你进入if之前是在while循环里,退出if没有exit又回到while中回复 8# mfkwwgi


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP