免费注册 查看新帖 |

Chinaunix

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

有关循环体使用的问题,请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-20 18:34 |只看该作者 |倒序浏览
有个KSH脚本,内容如下:

    ls -l
    echo "返回请按 " q ",刷新请按" r " : \c"
     while  read ans1
       do aa=$ans1
         if ["$aa"="q"]
          then
           break
         elif
         if ["$aa"="r"]
          then
          ?????
         fi
       done
      ;;

问题:如何在接收到键盘输入"r"时候,重新执行ls -l 这条呢?也就是在????处用什么方式使循环重新开始?

论坛徽章:
0
2 [报告]
发表于 2007-12-20 18:40 |只看该作者
???? 处你写什么都行,只要不写break, 循环就会重新开始,
恩,呵呵   就写 ls -l 好了

论坛徽章:
0
3 [报告]
发表于 2007-12-20 19:39 |只看该作者
呵呵,谢谢楼上兄弟的解答,不过也许,是我没有说清楚,这个shell是一个大循环中的分支循环,这个小循环顶部的命令是一条有回显的命令,我需要达到的目标是,回显内容后等待键盘输入,当接收到键盘输入“q”时,清屏退出这个小循环,回到上层大循环构架的目录中,当接收到键盘输入"r"时,重新执行这条命令并再次等待键盘输入。只是在这里用了一个同样有回显的命令替代了我实际需要执行的命令,呵呵。等待兄弟们给我提示……

论坛徽章:
0
4 [报告]
发表于 2007-12-21 11:39 |只看该作者
顶一下

论坛徽章:
0
5 [报告]
发表于 2007-12-21 13:58 |只看该作者
改成这样应该就可以了吧
while true
do
ls -l
echo "返回请按 " q ",刷新请按" r " : \c"
read ans1
aa=$ans1
   if ["$aa"="q"]
          then
           break
    elif
         if ["$aa"="r"]
          then
          continue
         fi
       done

[ 本帖最后由 sealearner 于 2007-12-21 13:59 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-12-21 14:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2007-12-21 17:05 |只看该作者
谢谢sealearner,不过,依然不行

论坛徽章:
0
8 [报告]
发表于 2007-12-21 17:11 |只看该作者
你把整个大结构用 伪代码整理一下吧,我想信是你没有描述清楚,论坛这么多高人,你的问题不会那么难的

论坛徽章:
0
9 [报告]
发表于 2007-12-21 20:44 |只看该作者
谢谢楼上的兄弟,这样吧,我把目前成型的shell段落贴上来,请各位兄弟帮我指点指点,谢谢

#!/bin/ksh

#系统当前时间
  dt=`date +"%Y年%m月%d日"`
  tm=`date +"%H:%M:%S"`

#主菜单
RunMenu()
{
    clear
echo   "                                                             "
echo   "                                 管  理  菜  单            "
echo   "          =========================================================="
    echo   "                           "$dt"  "$tm"\n                      "
    echo   "                     ┌────────────────────────────────┐ "
    echo   "                     │                                │"
    echo   "                     │       1. 卷组当前状态          │"
    echo   "                     │       2. 数据卷组状态          │"
    echo   "                     │       3. 启用数据卷组          │"
    echo   "                     │       4. 启动应用程序          │"
    echo   "                     │       5. 停止应用程序          │"
    echo   "                     │       6. 停止数据卷组          │"
    echo   "                     │       0. 退出管理系统          │"
    echo   "                     │                               │"
    echo   "                     └────────────────────────────────┘"
    echo   "                              请选择:  \c "
}


while true
  do
    RunMenu
    read ans
     case $ans in

        1)
          clear
          echo ""
          echo ""
          /usr/symcli/bin/symmir -sid 24 -f /dev/xxx.map query
            echo "返回请按" q "键,刷新请按" r ": \c"
             while true
               do
                read ans1
                 case $ans1 in
                   q)
                     clear
                     break
                   ;;
                   r)
                     clear
                     continue
                 esac
           done
          ;;
        2)
          clear
          echo ""
          echo ""
          lsvg -o
            echo "返回请按" q "键: \c"
             while true
               do
                 read ans1
                  case $ans1 in
                    q)
                      clear
                      break
                  esac
               done
          ;;
        3)
          clear
          echo ""
          echo ""
            varyonvg vg1
            varyonvg vg2
            echo "返回请按" q "键: \c"
             while true
               do
                 read ans1
                  case $ans1 in
                    q)
                      clear
                      break
                  esac
               done
          ;;
        4)
          clear
          echo ""
          echo ""
            start
            echo "返回请按" q "键: \c"
             while true
               do
                 read ans1
                  case $ans1 in
                    q)
                      clear
                      break
                  esac
               done
          ;;
        5)
          clear
          echo ""
          echo ""
            stop
            echo "返回请按" q "键: \c"
             while true
               do
                 read ans1
                  case $ans1 in
                    q)
                      clear
                      break
                  esac
               done
          ;;
          6)
          clear
          echo ""
          echo ""
            varyoffvg vg1
            varyoffvg vg2
            echo "返回请按" q "键: \c"
             while true
               do
                 read ans1
                  case $ans1 in
                    q)
                      clear
                      break
                  esac
               done
          ;;
         0)
           exit 0
     esac
   done


目前,其他段落运行没有问题,问题就在" 1)"处,我想在" 1)"这个段落实现显示完成后等待键盘输入,接收到"q"值时,退回到顶层菜单,而接收到"r"值时,重新运行"1)"这个段落中的那个命令,再次显示并等待键盘输入.

等待兄弟们给予提示

论坛徽章:
0
10 [报告]
发表于 2007-12-21 21:06 |只看该作者

  1. #!/bin/bash
  2. ls -l
  3. while true
  4. do
  5. echo "返回请按 q ,刷新请按 r "
  6. read ans1
  7. for aa in $ans1
  8. do
  9. case $aa in
  10. q)
  11. break 2
  12. ;;
  13. r)
  14. ls -l
  15. continue
  16. ;;

  17. esac
  18. done
  19. done
复制代码


5楼把if ["$aa"="r"]  if删掉就行了. 修改下.

[ 本帖最后由 linux_paly 于 2007-12-21 21:14 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP