免费注册 查看新帖 |

Chinaunix

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

关于循环的一些问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-08 21:50 |只看该作者 |倒序浏览
这是一个脚本中关于条件和循环的部分:

if condition;then
    echo -n "xxxxxxx y/n" #以上condition的return value为0,此处打印是否重新执行脚本。
    while read CHOICE
       do  case $CHOICE in
              y|Y)

???? #此处使用什么命令语句才能跳出循环,使脚本重新执行?
              ;;
              *)
              break
              ;;
           esac
       done
  elif condition
      cmd
  else
      cmd
fi

如果上述红色部分使用continue语句,好像并不能跳出循环,重新执行脚本进行条件判断。

论坛徽章:
0
2 [报告]
发表于 2008-11-08 22:08 |只看该作者
如果上述红色部分使用continue语句,好像并不能跳出循环,重新执行脚本进行条件判断。

LZ 有试验过吗?

论坛徽章:
0
3 [报告]
发表于 2008-11-09 09:59 |只看该作者
由于字体的原因,前面发的贴看的不是很清楚,所以再发一个简化了的脚本。

#!/bin/bash
#while.loop
if [ "$#" -ne 2 ];then
        echo -n "[y/n]: "
        while read CHOICE
        do
                case ${CHOICE} in
                        y|Y)
                        continue
                        ;;
                        *)
                        break
                        ;;
                esac
        done
  else
        echo "You are right"
fi

执行该脚本后如果输入"y"字符,还是不能跳出循环重新执行该脚本。
[xfm@ubuntu:~]$ ./while.loop
[y/n]: y
^C
[xfm@ubuntu:~]$
以上还是在循环,必需用Ctrl+c来中止。

在脚本中使用set -x来看一下执行过程。
[xfm@ubuntu:~]$ ./while.loop
+ '[' 0 -lt 2 -o 0 -gt 2 ']'
+ echo -n '[y/n]: '
[y/n]: + read CHOICE
y
+ case ${CHOICE} in
+ continue
+ read CHOICE


以上红色部分是输入的字符"y",而蓝色部分是输入"y"后的执行语句。

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2008-11-09 10:18 |只看该作者
原帖由 yezhulin1982 于 2008-11-9 09:59 发表
由于字体的原因,前面发的贴看的不是很清楚,所以再发一个简化了的脚本。

#!/bin/bash
#while.loop
if [ "$#" -ne 2 ];then
        echo -n "[y/n]: "
        while read CHOICE
        do
        ...



#!/bin/bash
#while.loop
while :
do
if [ "$#" -ne 2 ];then
        echo -n "[y/n]: "
        while read CHOICE
        do
                case ${CHOICE} in
                        y|Y)
                        break
                        ;;
                        *)
                        exit
                        ;;
                esac
        done
  else
        echo "You are right"
fi
done

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2008-11-09 10:29 |只看该作者
break

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2008-11-09 10:30 |只看该作者
其实break也不行,它并不可以让程序回到开始的那个if判断处,如果你希望break可以做到,那么那个if外面还得包一层循环

论坛徽章:
0
7 [报告]
发表于 2008-11-09 11:29 |只看该作者
以下是一个系统当前时间,根据输入的位置变量"$1"加上或减去位置变量"$2"多少分钟的time.pm脚本。

  1 #!/bin/bash
  2 #time.pm
  3
  4 if [ "$#" -ne 2 ];then
  5         echo "Please input two parameters,such as:[-+]m 0-59"
  6         echo -n "Do you again?[y/n] "
  7
  8         while read CHOICE
  9         do
10                 case ${CHOICE} in
11                 y|Y)
12                 echo -n "Please input two parameters,such as:[-+]m 0-59 "
13                 read PARM MIN
14                 exec /home/xfm/time.pm ${PARM} ${MIN}
15                 ;;
16                 *)
17                 break
18                 ;;
19                 esac
20         done
21
22   elif [ "$1" = "+m" -o "$1" = "m" ] && [ "$2" -ge 0 -a "$2" -le 59 ];then
23         time_p=$(date -d "+$2 minute")
24         echo ${time_p}
25
26   elif [ "$1" = "-m" ] && [ "$2" -ge 0 -a "$2" -le 59 ];then
27         time_m=$(date -d "-$2 minute")
28         echo ${time_m}
29   else
30         echo "The time's format is wrong"
31         exit
32 fi

终于弄好了。

论坛徽章:
0
8 [报告]
发表于 2008-11-09 11:33 |只看该作者
以上脚本只是用来练习shell编程用的,有些地方还请各位优化一下。
thx!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP