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
下一篇 2016-08-21

相关推荐

  • 网络管理1

    一、知识整理 1、路由转发:拆除第一层MAC地址,根据IP地址广播,收到信号后重新封装。一个路由器连接多个广播域,一个交换机连接多个冲突域。 2、网络用户应用程序:WEB浏览器;即时消息;电子邮件;协作(视频会议,vnc);web网络服务;文件网络服务;数据库服务;中间件服务(Tomcat);安全服务(netfilter)。 3、HDR:报头。Frame C…

    Linux干货 2016-09-05
  • grep正则表达式

    grep:这是一个搜索命令,搜文本并且将文本行显示出来 (1)grep -i 表示搜索的时候忽略大小写 (2)grep –colour 表示搜索关键字带颜色 例如:grep –colour ‘root’ /etc/passwd 显示为在etc的passwd里的 root 选项有颜色 *为了方便我们可以定义个别名,让他搜索的时候默认显示为带颜色 alias…

    Linux干货 2017-07-29
  • 文件权限

     本篇博客是对文件权限的简单介绍,将会简述下权限的数字表现形式,还有字母表现形式,还有一些特殊的suid、sgid、sticky的权限介绍,还有对ACL权限的简述。  一、权限的定义     关于权限,百度百科的解释如下:权限(privilege)是指某个特定的用户具有特定的系统资源使用权力,像是文…

    Linux干货 2017-07-29
  • 定时任务应用示例

    定时任务应用示例 1.每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202 mkdir /backup crontab -e * */4 * * * cp -ar /etc/ /backup/etc-$(date +%Y%m%d%H%M) 2.每周2,4,6备份/var/log/messages…

    Linux干货 2017-08-06
  • 浅谈RPM

    浅谈RPM    [先絮叨下编译啊]   1、 库:其实就是一个程序模块(它没有执行入口,不能独立执行,只能被能独立运行的程序调用时执行)你可以把它想象成工具螺丝刀,可执行的程序是就是你自己;螺丝刀能自己干活吗?没有螺丝刀能拧螺丝吗?或者说你现在制作一个? 螺丝刀可以实现这个功能但需要你来执行这个动作。   2、静态编译:将程序所需要的所有的库都编…

    Linux干货 2015-04-27
  • 创建CA 和申请证书

    创建CA 和申请证书1生成私有CA的私钥:(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)注:CA的私钥文件必须放在/etc/pki/CA/private/cakey.pem 这个路径里2创建序列号 ,数据库文件touch  /etc/pki/CA/index.tx…

    Linux干货 2017-07-17