shell之循環結構

一循環語句
1.1 帶列表的for循環語句shell

    for variable in{list}express

    do數組

           statement1bash

    done命令行

    (list爲一個列表,for循環的執行次數與list中元數個數相關,shell將in關鍵字後面的list列表的第一個元素值賦給變量variabel,而後執行循環體,list元素都被訪問完後,程序執行done語句後面的其餘語句。)字符串

    例子:it

    #! /bin/bashio

    #for循環開始for循環

    for var in 1 2 3 45 6 7 8變量

    do

       #依次輸出列表中的數字

       echo "the number is $var"

    done

    結果:

    the number is 1

    the number is 2

    the number is 3

    the number is 4

    the number is 5

    the number is 6

    the number is 7

    the number is 8

    另外,shell容許指定for語句的步長,基本語法爲:

    for variable in{start..end..step}

    用字符串做爲元素,可省略外面的大括號,如:

    for day in mon tuewed thu

    能夠用ls命令的輸出結果做爲for循環的執行條件。如:

    #! /bin/bash

    #使用ls命令的執行結果做爲列表

    for file in $(ls)

    do

       #輸出每一個文件名

       echo "$file"

    done

    ($()的做用就是講其中的字符串做爲命令執行,可用`ls`替代。)

    上面例子能夠等價於

    #! /bin/bash

    #使用通配符做爲列表條件,列出當前目錄全部文件

    for file in *

    do

       echo "$file"

    done

     列表for循環另外一個比較重要的用途是處理腳本參數。可經過$*一次獲取全部參數。用戶能夠經過將該系統變量獲取的參數值做爲for循環的條件列表。從而一次處理各個參數。

    例子

    #!/bin/bash

    #輸出全部的參數

    echo"$*"

    #將參數列表做爲條件

    for arg in $*

    do

       #依次輸出各個參數值

       echo "${arg}"

    done

    執行:./ex5.sh a b c d

    結果:a b c d

             a

             b

             c

             d

1.2 不帶列表的for循環

    for variable

    do

           statement1

    done

    (沒有條件列表,shell從命令行獲取條件列表)

    等價於

    for variable in $@

    do

           statement1

    done

    ($@也是獲取全部參數)

    等價於

    for variable in $*

    do

           statement1

    done

    例子:
    #! /bin/bash

    #! /bin/bash

    #不帶條件列表

    for arg

    do

       #輸出每一個參數

       echo "$arg"

    done

     for語句處理數組

    for variable in${array[*]}

1.3 until語句

    until expression

    do

           statement1

    done

    (expression不爲0執行statement1,執行完後繼續判斷expression,不爲0,繼續執行,爲0則退出)

    用until批量增長用戶:

    #! /bin/bash

    #定義變量i

    i=1

    #一直循環到變量i的值爲21

    until ["$i" -eq 21 ]

    do

       #執行useradd命令添加用戶

       useradd user$i

       #修改用戶密碼

       echo "password" | passwd --stdinuser$i > /dev/null

       #循環變量自增

       let "i++"

    done

    until循環刪除系統用戶:

    #! /bin/bash

    i=1

    until ["$i" -eq 21 ]

    do

       #依次刪除用戶

       userdel -r user$i

       let "i++"

    done

1.4 whlie循環語句

    while expression

    do   

           statement1

    done

    (expression 爲0執行循環體(即爲真執行))

    例子:

    #! /bin/bash

    #定義循環變量

    i=1

    #while循環開始

    while [["$i" -lt 10 ]]      //小於10,爲真,即0,執行循環體

    do

       #計算平方

       let "square=i*i"

       #輸出平方

       echo "$i*$i=$square"

       #循環變量自增

       let "i=i+1"

    done

    用戶可在程序中設置一個特殊的標記值,當該標記值出現時,終止while循環。

    例子:

    #! /bin/bash

     #提示用戶輸入數字

    echo "Pleaseenter a number between 1 and 10.Enter 0 to exit."

    #讀取用戶輸入的數字

    read var

    #while循環開始

    while [["$var" != 0 ]]

    do

       #提示用戶輸入數字過小

       if [ "$var" -lt 5 ]

       then

          echo "Too small. Try again."

          read var

       #提示用戶輸入數字太大

       elif [ "$var" -gt 5 ]

       then

          echo "Too big. Try again."

          read var;

        else

           echo "Congratulation! You areright."

           exit 0;

    fi

    (上面變量var是結束標記,爲0或5時,退出循環)

1.5 嵌套循環:

    例子1:九九乘法表:

    #! /bin/bash

    #外層循環

    for((i=1;i<=9;i++))

    do

       #內層循環

       for ((j=1;j<=i;j++))

       do

          #計算2個數的乘積

          let "product=i*j"

          #輸出乘積

          printf "$i*$j=$product"

          #輸出空格分隔符

          if [[ "$product" -gt 9 ]]

          then

             printf "   "

          else

             printf "    "

          fi

       done

       echo

    done

1.6 break語句控制循環

    break當即跳出某個循環,執行循環體後面的語句。

    默認狀況下,break退出一層循環,可在後面增長一個數字做爲參數,指定要退出的循環參數。如:break2退出兩層循環。

 1.7 continue語句控制循環

    continue跳過當前循環體中該語句後面的語句,從新從循環語句開始的位置執行。

    例子:

    #! /bin/bash

    for var in {1..10}

    do

       #若是當前數字爲奇數,從新循環

       if [[ "$var%2" -eq 1 ]]

       then

          #跳事後面的語句

          continue

       fi

       echo "$var"

    done

    結果:輸出10之內的偶數

     注意:continue與break的本質區別是continue沒有跳出循環結構

相關文章
相關標籤/搜索