Shell脚本中循环浅析

shell脚本中,循环是很重要的一环。循环可以不断的执行某个程序段落,直到用户设置的条件达成为止。在shell中,除了这种依据判断时达成与否的不定循环之外,还有另外一种已经固定要跑多少次的循环,可称之为固定循环。下面,我们主要对forwhileuntil三种循环做一下介绍。

 

一、for循环

For循环是给定变量列表的固定次数循环,其执行机制为依次将列表中的元素赋值给“变量名”,每次赋值后即执行一次循环体,直到列表中的元素耗尽,循环结束。其基本语法如下:

for 变量名 in 变量列表;do

循环体

Done

由于是固定次数循环,而其循环次数是由变量列表所决定的,那么对于变量列表,其生成方式主要有以下几种:

Ø  直接给出列表

Ø  整数列表

    {m..n}

    ${seq m n}

Ø  返回列表的命令; $(COMMAND)

Ø  使用glob,如:*.sh

Ø  变量引用:$@,$*

其中,对于整数型的变量列表,shell同样提供了类似于C语言的for循环风格,其语法为:

for ((初始值;限制值;执行步长));do

程序段

done

这种语法适合于数值方式的运算当中,在for后面的括号内的三串内容意义为:

Ø  初始值:某个变量在循环当中的初始值,直接以类似i=1设置;

Ø  限制值:当变量的值在这个限制值的范围内,就继续进行循环,例如i<=100

Ø  执行步长:每做一次循环时变量的变化量,如:i=i+1

对于此种语法,其执行顺序为:初始值à限制值à程序段à执行步长à限制值。如此就形成了一个循环,直至变量超过限制值时结束循环。

下面我们利用for循环的两种语法分别打印九九乘法表。

首先我们用标准型for循环语法来编写脚本。

    #!/bin/bash    
    for i in {1..9};do
        for j in $(seq $i);do
            num=$[j*i]
            echo -ne "$i*$i=$num\t"
        done
        echo
    done

然后我们用C语言风格的for循环语法来编写脚本。

    #!/bin/bash    
    for ((i=1;i<=9;i++));do
        for ((j=1;j<=i;j++));do
            num=$[j*i]
            echo -ne "$j*$i=$num\t"
        done
        echo
    done

 

二、while循环

While循环是一种条件判断循环,只要满足设置的条件,就会执行相应的命令。其常用的基本语法如下。

while CONDITION; do

循环体

done

其中CONDITION为循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断;若条件判断为“true”,则执行一次循环;直到条件判断为“false”,则终止循环;因此,CONDITION一般应该有循环控制变量,而此变量的值会在循环体不断的被修正。

下面我们以while循环来打印一下九九乘法表。

    #!/bin/bash    
    i=1                                        #循环控制变量
    while [ $i -le 9 ];do
       j=1                                  #循环控制变量
       while [ $j -le $i ];do 
          num=$[j*i]
          echo -ne "$j*$i=$num\t"
          j=$((j+1))                        #循环控制变量的值在循环体内不断被修正
       done 
       echo 
       i=$((i+1))                            #循环控制变量的值在循环体内不断被修正
    done

 

三、until循环

Until循环同样是一种条件判断循环,只要不满足设置的条件,就会执行相应的命令,其常用语法如下。

until CONDITION; do

循环体

done

其中CONDITION为循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断;若条件判断为“false”,则执行一次循环;直到条件判断为“true”,则终止循环;因此,CONDITION一般应该有循环控制变量,而此变量的值会在循环体不断的被修正。

下面我们以until循环来打印一下九九乘法表。

    #!/bin/bash    
    i=1                                        #循环控制变量
    until [ $i -gt 9 ];do
        j=1                                  #循环控制变量
        until [ $j -gt $i ];do
            num=$[j*i]
            echo -ne "$j*$i=$num\t"
            j=$((j+1))                     #循环控制变量的值在循环体中不断被修正
        done
        echo
        i=$((i+1))                           #循环控制变量的值在循环体中不断被修正
    done

原创文章,作者:luoliumeng,如若转载,请注明出处:http://www.178linux.com/38241

(0)
luoliumengluoliumeng
上一篇 2016-08-21 20:46
下一篇 2016-08-21 20:46

相关推荐

  • 发送mail的几种方法

    mail,顾名思义就是邮件。在这两天上课中,接触了发送mail的一些用法,课下自己在网上又查询补充了一下,总结出来,增加印像。 为了显示清晰,首先我们分别使用两个用户在不同的终端下登录,一个超级管理员root,一个是刚刚创建的用户zhangsan,看下图: 首先先来看一下发送mail用到什么选项:  -s<邮件主题>:指定邮件的主题; …

    2017-07-20
  • Redis基于keepalived的高可用实践

    接着上一章节来: Redis基于keepalived的高可用实现 方案拓扑图 测试方案 1.       手动关闭AppM keepalived进程确认keepalived主从变化,AppS1是否变更为主 2.       开启keepal…

    2015-03-05
  • Python之入门篇

    一、环境准备 环境准备 –> pyenv (安装python解释器,管理Python版本,管理python虚拟环境) https://github.com/pyenv/pyenv https://github.com/yyuu/pyenv-installer # yum -y install git # curl -L https://ra…

    Linux干货 2017-02-05
  • 78 款 Markdown 工具

    Markdown 是一种易写易读的文本标记语言。本文介绍了编写、查看 Markdown 的78种工具,涵盖桌面端、移动端和 web 端。     Markable 强大的在线 Markdown 编辑器,支持语法高亮、自动缩进、高亮所在行、显示行数、即时预览。它支持将 HTML 转换成 Markdown。 可以配合 Evernote、Dro…

    2015-03-26
  • 【26期】Linux第四周学习小总结

        第四周了,转眼就学习有关Linux的知识一月了,从开始的懵懵懂懂,到现在的懵懵懂懂,不变的是无边无际的知识,改变的是一小片迷雾被我们渐渐拨开了一角,学习的枯燥和充实,陪我们走完这安稳的最后学习时光。     今天分享的是一些我们本周学习的变量方面的东西,那么,什么是变量呢?变量来源于数学,是计算机语言中能储存计…

    2017-08-05
  • 安装Redmine

    Redmine是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理。Redmine是一个自由开放源码软件解决方案,它提供集成的项目管理功能,问题跟踪,并为多个版本控制选项的支持。虽说像IBM Rational Team Concert的商业项目调查工具已经很强大了,但想坚持一个自由和开放源码的解决…

    Linux干货 2016-12-01