Shell腳本中循環淺析

shell腳本中,循環是很重要的一環。循環可以不斷的執行某個程序段落,直到用戶設置的條件達成為止。在shell中,除了這種依據判斷時達成與否的不定循環之外,還有另外一種已經固定要跑多少次的循環,可稱之為固定循環。下面,我們主要對for,while,until三種循環做一下介紹。

 

一、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.www58058.com/38241

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

相關推薦

  • 流編輯器Sed(Stream Edit)詳解

    流編輯器Sed(Stream Edit)詳解       Grep 、sed 和awk并稱為文本三劍客。使用Grep就可以很好的實現文本查找的功能,而且簡單有效。然而其卻無法直接對其進行編輯,sed的出現便解決了這一問題。 Sed被稱為流編輯器,它是一種新型的非交互式的文本編輯器,它逐行處理文件或輸入,并將結…

    Linux干貨 2016-08-22
  • 使用keepalive實現nginx反向代理高可用

    簡介: 在網站架構中,為了分散客戶端對服務器的訪問壓力,可以使用nginx作為反向代理。但是使用一個nginx作為代理服務器必定會面對單點故障的情況,所以一般使用多臺nginx反代服務器,而使用多臺nginx服務器還要面對如何協調調度的問題。在此,我給大家介紹使用keepalive協調調度nginx反代服務器的方法。   keepalive簡介 說…

    2017-05-15
  • N26 第二周

    本周學習了: linux的目錄層級結構、常見文件類型、bash基本特性、文件的基本管理命令、globbing文件通配符、用戶管理命令 開始作業! 1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。    文件管理命令有:ls,cp,mv,pwd,mkdir,rmdir,touch  …

    Linux干貨 2017-01-12
  • 馬哥教育網絡班21期第1周課程練習 — 草稿

    1、描述計算機的組成及其功能。     計算機的主要組成部分包括:運算器、控制器、存儲器、輸入設備、輸出設備。        按更常見的組件來講:CPU = 運算器+控制器、 內存+硬盤 = 存儲器、 I/O = 輸入設備+輸出設備  &n…

    Linux干貨 2016-07-07
  • 8-8 sed 練習

    8-8 作業 1. 如何設置tab縮進為4個字符? 2. 復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log; 3. 刪除/tmp/functions文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號;

    Linux干貨 2016-08-12
欧美性久久久久