Linux Bash Shell-小循環(huán)大用處
當(dāng)你可以讓 for 循環(huán)為你執(zhí)行相同的代碼時(shí),為什么還要在你的 shell 腳本中一次又一次地運(yùn)行相同的代碼呢?
循環(huán)是一門與生俱來(lái)的藝術(shù),它可以使你的工作更簡(jiǎn)單,并幫助你相對(duì)輕松地自動(dòng)化重復(fù)性任務(wù)。
想象一種情況,你需要更新一系列數(shù)字或文本,不要手動(dòng)執(zhí)行,而是讓系統(tǒng)為你執(zhí)行。這就是循環(huán)的力量以及它為你帶來(lái)的好處。
循環(huán)作為一種函數(shù),幾乎在所有編程語(yǔ)言中都可用。Linux 的 Bash 也不例外。
這篇是一個(gè)指南文章,解釋了如何在 shell 腳本中使用 for 循環(huán)。
for 循環(huán)結(jié)構(gòu)
在 shell 腳本中使用 for 循環(huán)相當(dāng)簡(jiǎn)單,你可以操縱結(jié)構(gòu)來(lái)實(shí)現(xiàn)不同的目標(biāo)。
基本結(jié)構(gòu)如下:
for item in [LIST]
do
[COMMANDS]
done
使用循環(huán),你可以根據(jù)時(shí)間的需要在數(shù)字和字符值之間循環(huán)。
這是 shell 腳本中 for 循環(huán)的結(jié)構(gòu):
for VARIABLE in 1 2 3 4 5 .. N
do
command1
command2
commandN
done
你可以在第一行定義迭代次數(shù)。這樣,你將提及起始值和結(jié)束值。
迭代次數(shù)由你指定的值確定,而do語(yǔ)句后面的代碼是生成的循環(huán)值。
在 Linux Bash 中創(chuàng)建和運(yùn)行 for 循環(huán)
打開(kāi) Linux 終端開(kāi)始編寫代碼。
文本編輯器用于存儲(chǔ) shell 腳本,該腳本在執(zhí)行時(shí)打印所需的結(jié)果。出于說(shuō)明目的,本指南中的命令是在nano文本編輯器中編寫的。
在終端命令行中輸入nano以打開(kāi)文本編輯器,然后輸入 shell 腳本名稱。
linuxmi@linuxmi:~/www.linuxmi.com$ nano LinuxMi.com.sh
你可以將 shell 腳本的名稱更改為你喜歡的任何名稱。擴(kuò)展名為sh,因?yàn)槟銓⒋鎯?chǔ)一個(gè) shell 腳本。
使用 for 循環(huán)打印整數(shù)
在本節(jié)中,以下代碼將演示如何以不同方式打印整數(shù)值。要在 shell 腳本中使用 for 循環(huán)來(lái)打印整數(shù),你可以嘗試其中一些代碼示例。
1.循環(huán)代碼打印一組數(shù)字
編輯器打開(kāi)后,就該編寫代碼了。
for i in 1 2 3
do
echo "Current # $i"
done
輸出:
說(shuō)明:
- i = 存儲(chǔ)迭代值的變量名
- 1 2 3 = shell 腳本中 for 循環(huán)的迭代次數(shù)
- do = 執(zhí)行一組特定動(dòng)作的命令
- echo = 打印旁邊定義的結(jié)果
- done = 循環(huán)結(jié)束
按Ctrl + X將代碼保存在文本編輯器中。保存并退出腳本。
在執(zhí)行代碼之前,你必須更改 shell 腳本的權(quán)限。
輸入chmod +x后跟你的 shell 腳本文件名:
linuxmi@linuxmi:~/www.linuxmi.com$ chmod +x LinuxMi.com.sh
授予權(quán)限后,通過(guò)鍵入以下內(nèi)容在 shell 腳本中運(yùn)行 for 循環(huán):
linuxmi@linuxmi:~/www.linuxmi.com$ ./LinuxMi.com.sh
輸出將打印在終端窗口中。
2. 打印一組數(shù)字的替代方法
在 shell 腳本中定義 for 循環(huán)還有其他方法。你還可以使用大括號(hào)指定循環(huán)迭代的開(kāi)始值和結(jié)束值。
下面是代碼結(jié)構(gòu):
for i in {1..3} # for循環(huán)定義了一個(gè)變量,以及要通過(guò)一個(gè)循環(huán)進(jìn)行多少次迭代
do
echo "當(dāng)前值 # $i: 示例 2"
done
循環(huán)將運(yùn)行 3 次,值將按以下方式打?。?
3. 使用步長(zhǎng)值的循環(huán)代碼
如果你想在迭代中不連續(xù)地移動(dòng),你可以在循環(huán)中定義步長(zhǎng)值。根據(jù)指定的值,輸出將有一個(gè)固定的間隙。
例如:
for i in {1..10..2}
do
echo "Number = $i"
done
說(shuō)明:
- i = 存儲(chǔ)迭代的變量
- 1..10 = 運(yùn)行循環(huán)的迭代次數(shù)
- 2 = 階躍值
- do = 命令打印輸出
- echo = 打印命令
- done = 循環(huán)的退出命令
輸出:
輸出相差 2,這是在 step 語(yǔ)句中指定的。
使用 for 循環(huán)打印字符值
shell 腳本中的 for 循環(huán)不僅限于整數(shù)。在 Bash 中,你可以使用 for 循環(huán)來(lái)有效地遍歷字符和字符串值。
1. 遍歷字符串
這是一個(gè)基本示例,說(shuō)明如何遍歷一些字符串值(在 for 語(yǔ)句中定義):
for name in LinuxMi linuxmi.com www.linuxmi.com
do
echo "My name is $name"
done
說(shuō)明:
- name = 存儲(chǔ)字符串值的變量
- do = 命令打印輸出
- echo = 打印命令
- done = 循環(huán)的退出命令
輸出:
這個(gè) for 循環(huán)將迭代 3 次,因?yàn)樵趂or語(yǔ)句中只指定了三個(gè)字符串值。
2. 循環(huán)遍歷有條件的字符串
如果你想傳遞一些邏輯條件來(lái)中途終止循環(huán)怎么辦?為此,你可以使用邏輯語(yǔ)句,例如IF語(yǔ)句。IF 語(yǔ)句控制循環(huán)的工作方式以及結(jié)果將打印什么輸出。
for distro in LinuxMi Debian CentOS Ubuntu; do
if [[ "$distro" == 'CentOS' ]]; then
break
fi
echo "distro: $distro"
done
echo '全部完成!'
只要 distro 的值等于 CentOS,循環(huán)就會(huì)終止,并打印輸出。循環(huán)運(yùn)行直到不再滿足條件。
由于 CentOS 在值列表中排名第三,因此循環(huán)將運(yùn)行兩次迭代,然后打印最終輸出全部完成!
在 Linux Bash 中運(yùn)行循環(huán)
循環(huán)是 Linux shell 結(jié)構(gòu)中必不可少的一部分,它可以極大地增強(qiáng) Linux 腳本的功能。
如果你必須打印重復(fù)的輸出,沒(méi)有什么比 Bash 腳本中的循環(huán)更好的了。正如我們前面提到的,幾乎所有編程語(yǔ)言都可以使用循環(huán),Python 也不例外。減少重復(fù)并遵循 DRY(不要重復(fù)自己)代碼。