Bash for迴圈

與其他編程語言一樣,bash shell腳本也支持for迴圈以執行重複性任務。它有助於在字串中的一系列單詞或數組中的元素上迭代一組特定的語句。例如,可以多次運行UNIX命令(或任務),也可以僅使用for迴圈讀取和處理命令列表。

for迴圈的語法

可以通過兩種方式在bash腳本上應用for迴圈。一種方法是for-in,另一種方法是C語言語法。以下是bash shell腳本中for迴圈的語法:

for variable in list
do
commands
done

或者 -

for (( expression1; expression2; expression3 ))
do
commands
done

for迴圈語句有一些關鍵點需要記住:

  • bash中for迴圈的每個塊均以do關鍵字開頭,後跟該塊中的命令。for迴圈語句由done關鍵字關閉。
  • for迴圈的迭代時間取決於聲明的列表變數。
  • 迴圈將從列表中選擇一項,在迴圈中使用的變數上分配值。
  • dodone之間執行命令後,迴圈返回頂部,並從列表中選擇下一項,然後重複整個過程。
  • 列表可以包含數字或字串等,以空格分隔。

for迴圈示例

下麵提供了一些for迴圈示例,以說明它們如何工作:

示例1 - for迴圈基礎

Bash腳本:for-basic.sh

#!/bin/bash
#This is the basic example of 'for loop'.

learn="Start learning from xuhuhu.com"

for learn in $learn
do
echo $learn
done

echo "Thank You."

執行上面示例代碼,得到以下結果:
for迴圈基礎

示例2 - for迴圈範圍

for迴圈讀取範圍,Bash腳本:for-range.sh

#!/bin/bash
#This is the basic example to print a series of numbers from 1 to 10.

for num in {1..10}
do
echo $num
done

echo "Series of numbers from 1 to 10."

執行上面示例代碼,得到以下結果:
for迴圈範圍

示例3 - for迴圈增/減的範圍

For迴圈讀取帶增/減的範圍,可以通過添加兩個點(..)並將值相加來增加或減少指定的值,例如{START..END..INCREMENT}。查看以下示例:

遞增示例,腳本:for-increment.sh

#!/bin/bash

#For Loop to Read a Range with Increment

for num in {1..10..1}
do
echo $num
done

執行上面示例代碼,得到以下結果:
for迴圈增範圍

遞減示例,腳本:for-decrement.sh

#!/bin/bash

#For Loop to Read a Range with Decrement

for num in {10..0..1}
do
echo $num
done

執行上面示例代碼,得到以下結果:
for迴圈遞減示例

示例4 - for迴圈讀取數組變數

可以使用for迴圈來迭代數組的值。

語法可以定義為:

array=(  "element1" "element 2" .  .  "elementN" )

for i in "${arr[@]}"
do
echo $i
done

對於array中的每個元素,將執行從“do”到“done”的語句或命令集。對於各個迭代,可以在迴圈內將每個元素作為i進行訪問。請查看下麵的示例,演示如何使用for迴圈遍歷數組中的元素。

腳本檔:for-array.sh

#!/bin/bash

#Array Declaration
arr=( "Welcome","to","xuhuhu.com" )

for i in "${arr[@]}"
do
echo $i
done

執行上面示例代碼,得到以下結果:

maxsu@zaixian:~/bashcode$ vi for-array.sh
maxsu@zaixian:~/bashcode$ chmod u+x for-array.sh
maxsu@zaixian:~/bashcode$ ./for-array.sh
Welcome,
to,
xuhuhu.com

示例5 - for迴圈讀取字串中的空白作為單詞分隔符號
語法可以定義如下:

#!/bin/bash

for word in $str;
do
<Statements>
done

在這裏,str是指字串。

對字串的每個“單詞”執行從dodone中的語句。查看以下示例:

腳本檔:for-string.sh

#!/bin/bash
#For Loop to Read white spaces in String as word separators

str="Let's start
learning from xuhuhu.com."

for i in $str;
do
echo "$i"
done

執行上面示例代碼,得到以下結果:
單詞分隔符號

示例6 - for迴圈以單詞形式讀取字串中的每一行

語法定義如下:

#!/bin/bash

for word in "$str";
do
<Statements>
done

在這裏,對字串的“每行”執行從dodone的語句。參考以下示例:

Bash腳本檔:for-string2.sh

#!/bin/bash
#For Loop to Read each line in String as a word

str="Let's start
learning from
xuhuhu.com."

for i in "$str";
do
echo "$i"
done

執行上面示例代碼,得到以下結果:
讀取字串中的每一行

注意:“for迴圈將字串中的空白作為單詞分隔符號讀取”與“For迴圈將字串中的每一行作為單詞讀取”的唯一區別是字串變數周圍的雙引號。

示例7 - for迴圈讀取三運算式
三運算式語法是for迴圈的最常見語法。第一個運算式指的是初始化過程,第二個運算式指的是終止,第三個運算式指的是增量或減量。

查看以下示例,使用帶for迴圈的三運算式列印110之間的數字:

Bash腳本檔:three-expression.sh

#!/bin/bash
#For Loop to Read Three-expression

for ((i=1; i<=10; i++))
do
echo "$i"
done

執行上面示例代碼,得到以下結果:
for迴圈讀取三運算式

示例8 - for迴圈與break語句

可以在for迴圈中使用break語句來終止迴圈。

Bash腳本檔:for-break.sh

#!/bin/bash
#Table of 2

for table in {2..100..2}
do
echo $table
if [ $table == 20 ]; then
break
fi
done

執行上面示例代碼,得到以下結果:
for迴圈與break語句

示例9 - for迴圈與continue語句

可以在for迴圈中使用continue語句來跳過特定條件下的特定語句。它告訴Bash停止執行迴圈的特定迭代並處理下一個迭代。

Bash腳本檔:for-continue.sh

#!/bin/bash
#Numbers from 1 to 20, ignoring from 6 to 15 using continue statement"

for ((i=1; i<=20; i++));
do
if [[ $i -gt 5 && $i -lt 16 ]];
then
continue
fi
echo $i
done

執行上面示例代碼,得到以下結果:
for迴圈與continue語句

示例10 - for無限迴圈

當bash的三個運算式中沒有“開始,條件和增量”迴圈時,它將變為無限迴圈。要終止Bash中的無限迴圈,可以按Ctrl + C

Bash腳本檔:for-infinite.sh

#!/bin/bash

i=1;
for (( ; ; ))
do
sleep 1s
echo "Current Number: $((i++))"
done

執行上面示例代碼,得到以下結果:

for無限迴圈


上一篇: Bash case語句 下一篇: Bash while迴圈