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

相关推荐

  • 马哥教育网络第21期-第十三周课程练习

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; &n…

    Linux干货 2016-12-26
  • Linux基础命令之文本命令

    关于文本的命令:     1.文件查看命令:        a.cat:查看文件,实现参数给的内容一个个显示出来            -n:显示行号(显示的空行的行号)          …

    Linux干货 2016-08-07
  • Linux中命令的分类,hash缓存表与别名

        命令的分类:     在Linnux中,平常工作用的是字符界面。Linux输入命令后,shell接收命令通过系统调用把命令送入内核中执行。    *shell中的可执行命令分为两类        1.内部命令:为shell自带命令,利用某种形式在开机后…

    Linux干货 2017-07-15
  • echo

    echo命令详解

    Linux干货 2018-02-28
  • Linux用户和组管理

    Linux用户和组管理 Username / UID 管理员:root,0 普通用户 : 1–65535 系统用户 :系统已经已经存在专门用来对系统服务或者系统资源进行管理的 1–499(CentOS 6.X) 1–999 (CentOS 7.X) 登录用户:平时专门做系统管理的用户 500+ (CentOS 6.X) 1000+ (CeentOS 7.X)…

    Linux干货 2017-04-01
  • LINUX-用户和组管理

    LINUX用户和组管理 linux用户分类:Username/UID      管理员:root,UID 0号,拥有最高权限;负责系统的启功、停止,安装新软件,               增加、删除用户,保证系统正常运转;     &nb…

    2017-05-30