免费注册 查看新帖 |

Chinaunix

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

一个简单的 unti l循环 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-06 21:01 |只看该作者 |倒序浏览
以下摘自《Linux与UNIX Shell编程指南》

这段脚本不断的搜寻who命令中用户root,变量IS_ROOT保存grep命令结果。
如果找到了root,循环结束,并向用户simon发送邮件,通知他用户root已经登陆,注意这里sleep命令用法,它经常用于until循环,因为必须让循环体内命令睡眠几秒钟再执行,否则会消耗大量系统资源。

  1. 1    #!/bin/sh
  2. 2    #until_who
  3. 3    IS_ROOT=`who | grep root`
  4. 4    until [ "$IS_ROOT" ]
  5. 5    do
  6. 6            sleep 5
  7. 7    done
  8. 8    echo "Watch is. roots in" | mail simon
复制代码


我不明白为什么上述脚本能够实现上述描述的功能。
因为我觉得 IS_ROOT 的值不会每次循环都重新求值一次,也就是说IS_ROOT 的值在第 3 行已经定下来了,所以在执行这个脚本之前如果 root 还没有登陆的话,执行这个脚本就陷入死循环了,就算后来 root 登陆也不会令循环结束。
不知道这样理解对不对。
我初学请各位大侠多多指教,谢谢。

论坛徽章:
0
2 [报告]
发表于 2003-07-06 21:22 |只看该作者

一个简单的 unti l循环

...

确实如你所说,它只会在  until 循环体中,
这是不是个反例啊?

论坛徽章:
0
3 [报告]
发表于 2003-07-06 21:56 |只看该作者

一个简单的 unti l循环

原帖由 "红袖添香" 发表:
...

确实如你所说,它只会在  until 循环体中,
这是不是个反例啊?
   

姐姐我是从书上原原本本抄下来的,可怜买书还花了我 38 大元。

论坛徽章:
0
4 [报告]
发表于 2003-07-06 22:23 |只看该作者

一个简单的 unti l循环

原帖由 "uiibono" 发表:
   

姐姐我是从书上原原本本抄下来的,可怜买书还花了我 38 大元。
   


那可能是作者不小心,

只要把 第3句 放到循环体内就好了,也就是 第5句 的后面 就能达到你说的目的了。

论坛徽章:
0
5 [报告]
发表于 2003-07-06 23:25 |只看该作者

一个简单的 unti l循环

太不负责了吧...
告去吧~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP