免费注册 查看新帖 |

Chinaunix

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

break 内建命令使用------构建批处理菜单 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-12 09:19 |只看该作者 |倒序浏览

9.5.1. break 内建命令
http://www.21cstar.com/uploadfile/dhome/uploadfile/bash-guide/ch09s05.html
break 语句用来在正常结束之前退出当前循环。一般在当你事先不知道循环得执行多少次的时候使用,比如因为是依赖于用户输入的。
下面的例子证明了一个 while 循环是可以被中断的。这是
第 9.2.2.3 节 “使用键盘输入来控制while循环”
的 wisdom.sh 脚本稍微改进过的版本。
#!/bin/bash
# This script provides wisdom
# You can now exit in a decent way.
FORTUNE=/usr/games/fortune
while true; do
echo "On which topic do you want advice?"
echo "1.  politics"
echo "2.  startrek"
echo "3.  kernelnewbies"
echo "4.  sports"
echo "5.  bofh-excuses"
echo "6.  magic"
echo "7.  love"
echo "8.  literature"
echo "9.  drugs"
echo "10. education"
echo
echo -n "Enter your choice, or 0 for exit: "
read choice
echo
case $choice in
     1)
     $FORTUNE politics   #表示politics在FORTUNE=/usr/games/fortune目录下
     ;;
     2)
     $FORTUNE startrek
     ;;
     3)
     $FORTUNE kernelnewbies
     ;;
     4)
     echo "Sports are a waste of time, energy and money."
     echo "Go back to your keyboard."
     echo -e "\t\t\t\t -- \"Unhealthy is my middle name\" Soggie."
     ;;
     5)
     $FORTUNE bofh-excuses
     ;;
     6)
     $FORTUNE magic
     ;;
     7)
     $FORTUNE love
     ;;
     8)
     $FORTUNE literature
     ;;
     9)
     $FORTUNE drugs
     ;;
     10)
     $FORTUNE education
     ;;
     0)
     echo "OK, see you!"
     break
     ;;
     *)
     echo "That is not a valid choice, try a number from 0 to 10."
     ;;
esac  
done
注意 break 退出循环,而不是脚本。可以在脚本的结尾处加一个 echo 命令来证明。这个 echo 也会执行will also be executed upon input that causes break to be executed (when the user types “0”).
在嵌套循环中,break 允许指定哪个循环退出。参见Bash info 页面得到更多信息。
9.5.2. continue 内建命令
continue 语句继续 for, while, until or select 内的循环。
当在 for 循环使用的时候,控制变量取得列表中的下一个元素的值。当在一个 while 或者 until 结构中使用时,另一方面,执行随着 TEST-COMMAND 在循环的顶部继续。
9.5.3. 例子
在以下的例子中,文件名转化成小写。如果不需要转化,一个 continue 语句使得循环执行重新开始。这个命令不会消耗太多的系统资源,多数情况下,相似的问题可以通过使用 sed 和 awk 来解决。然而,当执行繁重任务的时候了解这样的结构是非常有用的,比没有太大必要把测试插入到一个脚本的正确位置,节约系统资源。
[carol@octarine ~/test] cat tolower.sh
#!/bin/bash
# This script converts all file names containing upper case characters into file# names containing only lower cases.
LIST="$(ls)"
for name in "$LIST"; do
if [[ "$name" != *[[:upper:]]* ]]; then
continue
fi
ORIG="$name"
NEW=`echo $name | tr 'A-Z' 'a-z'`
mv "$ORIG" "$NEW"
echo "new name for $ORIG is $NEW"
done
这个脚本至少有一个弱点:覆盖存在的文件。noclobber 选项对Bash来说只有在重定向发生才有作用。 mv 命令的 -b 选项提供更多安全性,但是只能防止在一次意外的覆盖,在这个测试中证明:
[carol@octarine ~/test] rm *
[carol@octarine ~/test] touch test Test TEST
[carol@octarine ~/test] bash -x tolower.sh
++ ls
+ LIST=test
Test
TEST
+ [[ test != *[[:upper:]]* ]]
+ continue
+ [[ Test != *[[:upper:]]* ]]
+ ORIG=Test
++ echo Test
++ tr A-Z a-z
+ NEW=test
+ mv -b Test test
+ echo 'new name for Test is test'
new name for Test is test
+ [[ TEST != *[[:upper:]]* ]]
+ ORIG=TEST
++ echo TEST
++ tr A-Z a-z
+ NEW=test
+ mv -b TEST test
+ echo 'new name for TEST is test'
new name for TEST is test
[carol@octarine ~/test] ls -a
./  ../  test  test~
tr 是 textutils 包的一部分;它能实现所有的字符转化。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76229/showart_1408556.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP