文档章节

第3章 shell结构化命令------------(while、until循环,九九乘法表)

henni_719
 henni_719
发布于 2017/04/22 17:23
字数 885
阅读 5
收藏 0

3.5 while、until命令

         while命令允许定义要测试的命令,然后只要定义的测试命令返回0退出状态代码。它在每次迭代开始时检查测试命令。测试命令返回非零退出状态代码时,while命令停止执行命令集。

3.5.1 使用多条测试命令

         while命令的格式是:

        

         在while命令中定义的test命令与在if-then语句中定义的格式一样。while命令的关键是指定的test命令的退出状态必须根据循环中命令的运行情况改变。如果退出状态不改变,while循环就会陷入无限的循环中。只要测试条件为true,while命令会继续循环定义的命令。在这些命令中,用于检测条件的变量一定要改变,否则就会无穷循环。

         while命令允许在while语句定义多条test命令。只有最后一条测试命令的退出状态是用来决定循环是何时停止的。在多命令while语句中,所有的测试命令在每次迭代中都执行,包含测试命令失败的最后一次迭代。

                第一条测试命令简单的显示了变了$result的当前值。第二条命令使用测试命令决定变了$test的值。当变量$test的值等于零时,while循环执行echo语句。接下来,用于下一次迭代的测试条件被执行。执行echo测试命令,显示变量test的值,它现在小于零。直到shell执行test测试命令,while循环才终止。这表明,在多命令while语句中,所有的测试命令在每次迭代中执行,包含测试命令失败的最后一次迭代。

#!/bin/bash
#while命令测试实例
test=10
result=1
while echo $result
      [ $test -gt 0 ]	
do
  result=$[ $result*$test ]
  test=$[ $test-1 ]
done
echo "10的阶乘"$result

3.5.2until命令与循环嵌套

         until命令刚好与while命令相反。until命令需要制定一条测试命令,这条命令通常产生一个非0的退出状态。只要测试命令的退出状态非0,bash shell就会执行列在循环当中的命令。一旦测试条件返回0退出状态,循环停止。until命令格式如下:

            

         与while命令相似,可以在until命令语句中使用多条测试命令。只有最后一条命令的退出状态能够决定bash shell是否执行其他定义的命令。            

#!/bin/bash
#until命令测试实例如下
var=10
result=1
until echo $var,$result
      [ $var -le 0 ]
do
    result=$[ $result*$var ]
    var=$[ $var -1 ]
done
echo "10的阶乘"$result
 

         一条循环语句可以在循环中使用任何类型的命令,包括其他循环命令。这种称为嵌套循环。使用嵌套循环时要谨慎,因为是在一个迭代内部执行另一个迭代,它增加了正在运行的命令的运行次数。

         嵌套循环(也称为内循环)对每次外部循环迭代都迭代所有的值。注意,两个循环的do命令和done命令之间没区别。嵌套循环实例:          

#!/bin/bash
#for嵌套for循环
#9*9乘法口诀
for(( i=1 ;i<=9;i++ ))
do
   for(( j=1;j<=9;j++ ))
   do
      #当$j小于等于$i,在屏幕上打印乘法表
      [ $j -le $i ] && echo -n "$i*$j=$[ $i * $j ]  "
   done
   echo ''
done

本文转载自:http://blog.csdn.net/henni_719/article/details/53468222

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
Shell资料

《Shell脚本学习指南》 关键字: shell 《Shell脚本学习指南》 在互动网上可以下载样章 【内容简介】 Shell脚本编程(scripting)的技巧永远不会过时:它们可以让UNIX充分发挥其真实的潜能。对...

小编
2009/06/16
933
1
shell学习之if-then语法

结构化命令允许你改变程序执行的顺序。在bash shell中有不少结构化命令,我们会逐个研究,先来看一下if-then。 bash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码(参见第1...

woshixin
2018/08/16
11
0
更多的结构化命令(第十三章)

1. for命令 for命令的基本格式 for VAR in LIST #VAR为变量,LIST为指定队列do COMMAND #当VAR存在时执行COMMANDdone 1.1 读取列表中的值 [root@localhost test]# vi test.sh !/bin/bash Bas...

wlwlwl890
2017/08/07
0
0
Shell脚本:打印九九乘法表

运行环境:Red Hat Enterprise Linux Server release 6.4 (Santiago) 今天用三种不同的方式实现了Shell脚本打印的九九乘法表,代码如下 方法1:使用for循环(a.sh) 方法2:使用while循环(b...

北风其凉
2014/11/14
6K
2
C语言编程入门学习:用C语言输出九九乘法表

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
19分钟前
2
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部