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

相关推荐

  • Linux的自动化安装实现

    在介绍自动化安装系统之前让我们来回顾一下系统的启动流程,系统的启动大概分为一下几个步骤:加电自检 boot sequence(mbr)— boot loader –>kernel(initramfs)—>rootfs  /sbin/init大概就是这么几个过程了,接下来来介绍系统的安装,安装系统虽然看起来简单,普…

    系统运维 2016-09-19
  • Linux发展及OS基础

    开源协定:          GPL  LGPL,Apache,BSD          BSD:      …

    Linux干货 2016-08-08
  • linux 启动文件 /etc/fstab 文件删除 无法开机 修复的方法

    /etc/fstab文件删除系统自检无法挂载 无法启动 按照提示进入命令行  手动写/etc/fstab,如无内核文件  无grub  就缺啥补啥 fdisk    -l 查看当前分区  blkid    查看分区文件系统的卷标 手动挂载 …

    Linux干货 2016-09-13
  • CentOS系统启动流程

        Linux系统的组成部分   1、动态视角:内核+根文件系统  2、静态视角:磁盘分区+文件 Linux运行中的系统环境   1、用户空间:应用程序(进程或线程)  2、内核空间:内核代码(系统调用) 内核设计流派:   *单内核设计:把所有功能集成于同一个程序,如:Linux  *微内核设计:每种功能使用一个单独的子系统实现,如…

    Linux干货 2016-12-30
  • Linux删除特殊字符文件

    由于很多原因可能会导致一些文件的文件名是乱码,当我们删除的时候就会发现这个文件名既不能自动补全,也不能直接删除。

    2017-11-11
  • haproxy实现discuz论坛的动静分离和负载均衡

    一、在cs2、cs3、cs4上安装httpd [root@cs2 ~]# yum install httpd [root@cs3 ~]# yum install httpd [root@cs4 ~]# yum install httpd 二…

    Linux干货 2016-06-05