新聞中心
循環(huán)是編程語(yǔ)言的基本概念之一。當(dāng)你想要一遍又一遍地運(yùn)行一系列命令直到達(dá)到某個(gè)條件后終止退出時(shí),循環(huán)很方便。

為張北等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及張北網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、張北網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
在諸如 Bash 之類的腳本語(yǔ)言中,循環(huán)對(duì)于自動(dòng)執(zhí)行重復(fù)性任務(wù)非常有用。在 Bash 腳本中有3個(gè)基本的循環(huán)結(jié)構(gòu),for 循環(huán), while 循環(huán),until 循環(huán)。
標(biāo)準(zhǔn) Bash for 循環(huán)
for 循環(huán)遍歷項(xiàng)列表并執(zhí)行給定的命令集。
Bash for 循環(huán)采用以下形式:
for item in [LIST]
do
[COMMANDS]
done
列表可以是由空格分隔的一系列字符串,一系列數(shù)字,命令輸出,數(shù)組等。
循環(huán)遍歷字符串
在下面的示例中,循環(huán)將遍歷字符串列表中的每個(gè)項(xiàng)目,使用變量 element 代表當(dāng)前項(xiàng)目。
for element in Hydrogen Helium Lithium Beryllium
do
echo "Element: $element"
done
循環(huán)將產(chǎn)生以下輸出:
Element: Hydrogen
Element: Helium
Element: Lithium
Element: Beryllium
循環(huán)遍歷數(shù)字范圍
您可以使用序列表達(dá)式通過定義范圍的起點(diǎn)和終點(diǎn)來(lái)指定數(shù)字或字符的范圍。序列表達(dá)式采用以下形式:
{START..END}
在下面的示例中,循環(huán)將遍歷從 0 到 3 的所有數(shù)字。
for i in {0..3}
do
echo "Number: $i"
done
Number: 0
Number: 1
Number: 2
Number: 3
從 Bash 4 開始,還可以在使用范圍時(shí)指定增量。表達(dá)式采用以下形式:
{START..END..INCREMENT}
for i in {0..20..5}
do
echo "Number: $i"
done
Number: 0
Number: 5
Number: 10
Number: 15
Number: 20
循環(huán)數(shù)組元素
您還可以使用 for 循環(huán)迭代元素?cái)?shù)組:
在下面的示例中,我們定義一個(gè)數(shù)組 BOOKS 并迭代數(shù)組的每個(gè)元素。
BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')
for book in "${BOOKS[@]}"; do
echo "Book: $book"
done
Book: In Search of Lost Time
Book: Don Quixote
Book: Ulysses
Book: The Great Gatsby
C 風(fēng)格的 Bash for 循環(huán)
C-style for 循環(huán)的語(yǔ)法采用以下形式:
for ((INITIALIZATION; TEST; STEP))
do
[COMMANDS]
done
INITIALIZATION 部分僅在循環(huán)開始時(shí)執(zhí)行一次。然后,評(píng)估 TEST 部分。如果為假,則 for 循環(huán)終止。如果 TEST 為真,則執(zhí)行 for 循環(huán)體內(nèi)的命令并更新 STEP 部分。
在下面的代碼中,循環(huán)通過初始化星型 i = 0 ,然后在每次迭代之前檢查是否 i ≤ 10 。如果為 true ,則打印當(dāng)前值 i 并將變量遞增 i 1 (i++) ,否則循環(huán)終止。
for ((i = 0 ; i do
echo "Counter: $i"
done
循環(huán)迭代 1001 次并將產(chǎn)生以下輸出:
Counter: 0
Counter: 1
Counter: 2
...
Counter: 998
Counter: 999
Counter: 1000
break 和 continue
break 和 continue 語(yǔ)句可用于控制 for 循環(huán)執(zhí)行。
break 語(yǔ)句
break 語(yǔ)句終止當(dāng)前循環(huán)并將程序控制傳遞給終止語(yǔ)句后面的語(yǔ)句。它通常用于在滿足某個(gè)條件時(shí)終止循環(huán)。
在下面的示例中,一旦當(dāng)前迭代項(xiàng)等于 ‘Lithium’ ,循環(huán)的執(zhí)行將終止。
for element in Hydrogen Helium Lithium Beryllium; do
if [[ "$element" == 'Lithium' ]]; then
break
fi
echo "Element: $element"
done
echo 'All Done!'
Element: Hydrogen
Element: Helium
All Done!
continue 語(yǔ)句
continue 語(yǔ)句退出循環(huán)的當(dāng)前迭代,并將程序控制傳遞給循環(huán)的下一次迭代。
在下面的示例中,我們迭代一系列數(shù)字,當(dāng)當(dāng)前迭代項(xiàng)等于 ‘2’ 時(shí), continue 語(yǔ)句將導(dǎo)致執(zhí)行返回到循環(huán)的開頭并繼續(xù)下一次迭代。
for i in {1..5}; do
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
Number: 1
Number: 3
Number: 4
Number: 5
For 循環(huán)示例
重命名文件名中包含空格的文件
下面的示例演示如何使用 Bash for 循環(huán)通過將空格替換為下劃線來(lái)重命名當(dāng)前目錄中的所有文件,并在其名稱中包含空格。
for file in *\ *; do
mv "$file" "${file// /_}"
done
讓我們逐行分解代碼:
-
第一行創(chuàng)建一個(gè) for 循環(huán),并遍歷其名稱中帶有空格的所有文件的列表。表達(dá)式 *\ * 創(chuàng)建列表。
-
第二行適用于列表中的每個(gè)項(xiàng)目,并將文件移動(dòng)到新的文件,用下劃線 (
) 替換空格。該部分 ${file// / } 使用 shell 參數(shù)擴(kuò)展來(lái)用字符串替換參數(shù)中的模式。
-
done 表示循環(huán)段的結(jié)束。
更改文件擴(kuò)展名
以下示例顯示如何使用 Bash for 循環(huán)通過將文件擴(kuò)展名從 .jpeg 替換為 .jpg 來(lái)重命名當(dāng)前目錄中以 .jpeg 結(jié)尾的所有文件。
for file in *.jpeg; do
mv -- "$file" "${file%.jpeg}.jpg"
done
讓我們逐行分析代碼:
-
第一行創(chuàng)建一個(gè) for 循環(huán),并遍歷一個(gè)包含 .jpeg 結(jié)尾的所有文件的列表。
-
第二行適用于列表中的每個(gè)項(xiàng)目,并將文件移動(dòng)到一個(gè)用 .jpg 替換 .jpeg 的新文件。該部分 ${file%.jpeg }使用 shell 參數(shù)擴(kuò)展從文件名中刪除 .jpeg 部分。
-
done 表示循環(huán)段的結(jié)束。
網(wǎng)站標(biāo)題:講解一下Bash中的for循環(huán)
網(wǎng)頁(yè)URL:http://fisionsoft.com.cn/article/dhipdsp.html


咨詢
建站咨詢
