循环编程的三种结构

上传人:s9****2 文档编号:498199235 上传时间:2023-01-08 格式:DOCX 页数:21 大小:58.71KB
返回 下载 相关 举报
循环编程的三种结构_第1页
第1页 / 共21页
循环编程的三种结构_第2页
第2页 / 共21页
循环编程的三种结构_第3页
第3页 / 共21页
循环编程的三种结构_第4页
第4页 / 共21页
循环编程的三种结构_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《循环编程的三种结构》由会员分享,可在线阅读,更多相关《循环编程的三种结构(21页珍藏版)》请在金锄头文库上搜索。

1、第 18 章 shell 编程 循环目标完成此章学习后,你将掌握下列内容:使用while结构,在某条件保持为真的情况下重复执行一 段代码。使用until结构,重复执行一段代码,直到某条件为真。使用for结构,遍历由空白区分隔的一串参数。18.1 循环介绍Loops - an IntroductionPurpose:Repeat execution of a list of commands.Control:Based on the return code of a key command.Three forms:while . do . done until . do . done for .

2、 do . done注释使用循环结构可以重复执行一个命令序列,就和分支结构一样,关键命令的返回码决定继续还是停止执行循环语句。test命令常常用来控制循环语句是否继续执行。分支结构的起始点是一个关键词,终点是该关键词的倒序词(f/fi和case/esac),循环结构与分支结构不同,它起始于一个关键词和一个条件,循环体被包围在do和done中间。18.2 用 let 命令做数学表达式运算Arithmetic Evaluation Using letSyntax:let expression or ( ( expression )Example:$ x=10$ g$ let x=x+2$ echo

3、 $x12$ let ux = x / (y + 1) H$ echo $x$ ( x = x + 1 )$ echo $x$ x=12$ let Tx 10 )$ echo $?$ if ( x 10 ) then echo x greater else echo x not greater fix greater注释通常shell通过递增一个数值型变量的值来控制循环语句。在shell脚本中let命令可以使 用数学表达式,它支持长整型变量。该命令的语法如本节幻灯片所示,expression是一个表达 式,可以代表shell变量和操作符。将表达式括在()里面的相当于let命令。shell能辨认

4、的 操作符如表18-1所示,按优先级从低到高排列。表 18-1操作符描述单操作符负号!逻辑非* / %乘、除、余数+ -力口、减=关系型比较=!=等于、不等于分配数值可以用括号改变一个表达式的计算顺序,如:let “x=x/(y+1)”应该注意的是:很有必要使用双引号使括号的特殊意义失效。同样,如果在表达式里有 空格,在使用let命令或者()时必须用双引号:let “x=x+(y/2)” 或者 ( x=x+(y/2 )当使用逻辑操作符和关系操作符(!、=、=、=、!=)时,shell的返回值变量?,会显示运算结果是true还是false(0代表true, 1代表false)。同样,还是要用双引

5、 号防止shell将小于等于号和大于等于号理解为输入输出重定向符。18.3 while 结构The while ConstructRepeat the loop while the condition is true.Syntax:whilelist Adolist BdoneExample:$ cat test_whilex=i-while ( X do echo hello X is $X let X=X+1 done其执行情况如下:(1) 执行 list A 中的命令。(2) 如果list A中最后一个命令的返回码为0 (true),那么执行list B。(3) 返回第一步。(4) 如果

6、list A中最后一个命令的返回码不是0 (false),跳到紧接done之后的第一个 命令。While结构流程图如图18-1所示。图 18-1 While 结构流程图警告注意使用无限性while循环。有些循环的控制命令永远返回真。$ cat while_infinitewhiletruedoecho hellodone$ while_infinitehellohelloCtrl + C18.4 while 结构例子The while Construct ExamplesExample B:Example A:Repeat while ans is yes.Repeat while there

7、 are cmd line arg.ans=yeswhileT, $ans = yes doecho Enter a nameread nameecho $name file.namesecho Continue?echo Enter yes or noread ansdonewhile ( $# != 0 )doif test -d $1thenecho contents of $1:Is -F $1fishiftecho There are $# itemsecho left on the cmd line. done注释本节幻灯片演示了 while结构的另外两个例子。例A演示的是:提示用

8、户输入一个值, 然后根据用户的反应决定是否继续循环。例B演示的是:循环检验命令行中的每个参数。如 果参数是一个目录,则显示该目录的内容。如果参数不是一个目录,则跳过该参数。请注意, 使用shift这个命令可以一个接一个地访问每一个参数。当它与while命令结合使用时,会使 循环结构变得很灵活。无论有1个还是100个参数,循环会继续进行,直到所有的参数被访 问完毕。应该注意的是如果想最少执行一次循环,可能需要建立一个while循环。例A将至少执 行一次循环体,因为例A中的ans已经被设置成等同于yes。在例B里,如果这个程序不带 例 A 中的命令行参数($#=0)执行,那么将不执行这个循环。18

9、.5 until 结构The until ConstructRepeat the loop until the condition is true.untillist A dolist BdoneSynx:Example:$ cat test_untilX=1until ( X 10 ) doecho hello X is $X let X=X+1done$ test_until hello X is 1 hello X is 2 hello X is 10注释until结构是shell提供的另一种循环机制,这个结构中的命令系列(list B)会保持循环 运行,直到某条件为真。与while结构

10、相似,这个条件是否为真由list A最后一个命令的返回 码决定。本节幻灯片中例子的执行情况如下:(1)执行list A中的命令。(2) 如果list A中最后一个命令的返回码不为0(false),那么执行list B。(3)返回第一步。(4)如果list A中最后一个命令的返回码为0 (true),跳到紧接done之后的第一个命令。 until结构流程图如图18-2所示。图 18-2 until 结构流程图警告注意使用无限until循环。有些循环的控制命令永远返回真。$ X=1$ until $X -eq 0 do echo hello donehellohelloCtrl + C18.6 u

11、ntil 结构例子The until Construct - ExamplesExample A:Repeat until ans is no.Example B:Repeat until there are no cmd line arg.ans=yes untilT,$ansT, dono until ( $# = 0 ) doif test -d $1thenecho Enter a nameecho contents of$1:read nameIs -F $1echo $name file.namesfiecho Continue?,Tshiftecho Enter yes or n

12、oecho There are $#itemsread ansecho left on thecmd line.donedone注释本节幻灯片例子的内容与在 while 结构中演示的一样,但这里用 until 结构来实现。注意 必须将while结构中测试条件的逻辑反过来,这样才能符合until结构测试条件的逻辑。还要注意:until结构对用户输入的敏感度与while结构相比,发生了微小的变化。在while 结构中,用户只有输入字符串yes,这个循环才会继续进行。继续循环的条件非常严格。而 在until结构中,用户输入的字符串只要不是no,这个循环都会继续进行。until结构对于继 续循环施加的

13、条件,没有while结构那么严格。当你决定哪种结构最适合你的需要时,你可 以将这些问题考虑在内。在上面的例子中,是否预定义 ans 变量的值并不太重要,因为这个变量会被初始化为 NULL。由于NULL不等于no,测试条件会返回false,于是可以开始执行循环。你只需确认 在测试表达式中用双引号#$ans括起来以符合test命令语法。18.7 for 结构The for ConstructFor each item in list, repeat the loop, assigning varto the next item in list until the list is exhausted.Syntax:for var in list dolist AExample:$ cat test_forfor X in 1_2 3 4 5 doecho 2 * $X is c let X=X*2ech

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号