• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

shell 5

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 20次 | 进入软件测试论坛讨论

领测软件测试网
shell编程之循环语句(2)

7.for语句

对列表的每一条目都进行一次循环过程,每完成一次循环过程就将var赋予列表中下一个条目,直到完成最后一个条目的循环为止

语法: 例子:

for var in list$ cat test_for
do for X in 1 2 3 4 5
list A do
done echo "2 * $X is \c"
 let X=X*2
 echo $X
 done

 $ test_for
 2 * 1 is 2
 2 * 2 is 4
 2 * 3 is 6
 2 * 4 is 8
 2 * 5 is 10
 

 

在上例中,关键字为for,in,do和done,var代表一个shell变量的名字,这个变量的赋值会贯穿for循环的执行过程中,list是一串由空格或者tab分割开的字符串,在每一次循环执行都要将一个串赋值给var。

for循环的执行过程如下:

1.shell变量var被设置等于list中的第一个字符。

2.list A中的命令会被执行。

3.shell变量var被设置等于list中下一个字符。

4.list A中的命令被执行。

5.循环会持续执行,直到每一个list中的条目都执行过循环为止。

 

8.for循环的例子

例A:

$ cat example_A
for NAME in $(grep home /etc/passwd | cut -f1 -d
do
mail $NAME < mtg.minutes
echo mailed mtg.minutes to $NAME
done

 

例B

$ cat example_B
for FILE in *
do

if
test -d $FILE
then
ls -F $FILE

fi

done
 

for结构是一种非常灵活的循环结构,它能够让循环贯穿任何能产生的列表。列表能很容易地用命令替代来产生,就像第一个例子中一样。使用管道和过滤器,能够从任何事产生一个列表。

如果你要求多次存取相同的列表,你也许想要将它存储到个文件中。你可以使用cat命令来为你的for循环产生列表,正如下例所示:

$ cat students
user1
user2
user3
user4

$ cat for_student_file_copy
for NAME in $(cat_students)
do
cp test.file /home/$NAME
chown $NAME /home/$NAME/test.file
chmod g-w,o-w /home/$NAME/test.file
echo done $NAME
done

$

存取命令行参数

你可以从命令行参数来产生list:

for i in $*或者for i
do do
cp $i $HOME/backupscp $i $HOME/backups
done done

 

9.break,continue,和exit命令

break [n] 中止循环过程的执行,并且跳到下一个命令。

continue [n]停止循环过程的当前一个反复并且跳到循环中的下一个反复过程的开始部分

exit [n]  停止shell程序的执行,并且将返回值设置为n。
 

在许多情况下,你可能需要在循环的正常中止条件满足之前放弃一个循环的执行。break和continue命令提供了一种无条件的流程控制。通常是在遇到一个错误的情况下来中止当前的循环继续执行。而exit命令用在不能从某种情况下恢复出来,而必须中止整个程序的运行的时候。

break命令会中止循环并且将控制权传递到done关键字后面的第一个命令。结果是完全跳出这个循环体而继续执行下面的命令。

continue命令有一点不同。当在程序执行过程中遇到这个命令,就会忽略本次循环中剩余的命令,而将控制权交给循环的顶部。这样,continue命令能让你仅仅中止循环过程中的一个反复但是继续从循环的顶部开始执行。

在while和until循环中,这种处理(continue)会导致在初始列表的开始部分继续执行,在for循环中,会将变量设置为列表中的下一个条目,然后继续执行循环。

exit命令停止执行当前的shell程序,并且根据提供的参数为这个shell程序设置一个返回值,如果没有提供返回值参数,当前的shell程序的返回值会被设置为在exit命令之前执行的命令的返回值。

注意:循环的流程控制在正常的情况下应当是通过设置循环开始部分的条件(while,until),或者是列表中的条目都循环完的(for),的情况来结束循环。而对循环过程进行中断操作仅仅应当在循环执行期间遇到没有规律的或者是错误的条件的时候才应当使用。

 

10.break和continue的例子

while
true
do
echo "Enter file to remove: \c"
 read FILE
if test ! -f $FILE
then
echo $FILE is not a regular file
continue
fi
echo removing $FILE
rm $FILE
break
done

 
 

这个例子显示break和continue命令的一次有效的使用。这个命令的执行是在while循环的test条件为真的情况下,会始终产生一个为真的结果;这意味着这个循环会是一个无限的循环,除非循环体中的某些命令能中止循环的运行(这就是bread命令需要做的)。如果输入的文件不是一个普通文件,一个错误信息会打印,同时continue命令会提醒用户再输入一次文件名。如果这个文件是个普通的文件,它会被删除,并且break命令被用来跳出这个无穷循环。

 

11.shell编程之循环-总结 

let expression 计算一个算术表达式

((expression)) 计算一个算术表达式

while condition is true do ...done while

until condition is true do ... doneuntil

for var in list do ... done  for

break [n]break out of loop

continue [n] 中止当前循环中的一次循环过程

exit [n] 中止这个程序
 


 btq 回复于:2002-09-12 22:01:25
很好,希望常看到这样的文章

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网