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

相關推薦

  • 學習linux命令和幫助

    一、初級命令: 命令的語法通用格式:  #COMMAND OPTIONS ARGUMRNTS OPTIONS:制定命令的運行特性 選項有兩種表現形式:    段選項: -c    短選項:–word 例如 –help –human-readable ARGUM…

    Linux干貨 2016-10-30
  • 第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 2、取出最后登錄到當前系統的用戶的相關信息。 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。 5、取出當前主機的…

    Linux干貨 2017-02-06
  • 第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; %s@^[[:space:]]\+@#&@g 2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的…

    Linux干貨 2017-03-03
  • N21_第二周練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理類命令:cp,mv.rm 復制命令:cp 格式:        cp [OPTION]… [-T] SOURCE DEST        cp [OPTION]… SOU…

    Linux干貨 2016-07-16
  • 硬盤分區及掛載

    標簽:文件系統、分區、掛載 一、Linux的基本原則    1、一切皆文件(包括硬件);這個原則會會在很多方面得到體現; 磁盤在Linux中也表現為文件,即/dev目錄下:IDE,ATA:/dev/hd[a-z]    SATA,SCSI,USB,SAS:sd[a-z]。    &nbsp…

    Linux干貨 2015-05-18
  • 文件查找與解壓縮

    文件查找 腳本文件名的查詢 which(尋找執行文件) which [-a] command -a :將所有由PATH目錄中可以找到的命令均列出,而不只是第一個被找到的命令名稱 文件名的查找 文件查找:實時查找:遍歷所有文件進行條件匹配;(find)非實時查找:根據索引查找;(whereis、locate) whereis whereis [-bmsu] […

    Linux干貨 2017-04-08
欧美性久久久久