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