Bash 基礎知識系列 #8:For、While 和 Until 循環
在 Bash 基礎知識系列的倒數第二章節,學習
for
、while
和until
循環。
循環是任何編程語言中的一個強大功能。如果你還不知道,循環其實是一種根據某些條件重複代碼的方式。
例如,想像一下你需要列印從 1 到 10 的數字。你可以使用 echo
命令寫十次,但那太原始了。你使用一個循環,在 3 到 4 行代碼內,就能完成。
這是我能想到的最簡單的例子。我將在討論 Bash 循環時,分享一些實際有用的例子。
在 Bash 中有三種類型的循環:
for
while
until
我將在教程中展示所有三種類型的循環。讓我們從最常見的一種開始。
Bash 中的 For 循環
以下是 Bash 中的 for
循環語法:
for arg in LIST; do
commands
done
這裡的 LIST
可能是一個數組或者一個項目列表。括弧擴展 也是進行循環的常用手段。
考慮一下我在開始提到的最簡單的場景。讓我們使用 for
循環列印從 1 到 10 的數字:
#!/bin/bash
for num in {1..10}; do
echo $num
done
如果你運行它,你應該會看到像這樣的輸出:
$ ./for-loop.sh
1
2
3
4
5
6
7
8
9
10
你也可以使用 for num in 1 2 3 4 5 6 7 8 9 10; do
,但是使用括弧擴展使得代碼看起來更短且更智能。
{..}
是用於擴展模式的。你使用 {d..h}
,它等同於 d e f g h
。關於括弧擴展的更多信息,可以在這篇文章中找到。
? 如果你熟悉 C 語言編程,你可能會喜歡在 bash 中使用 C 風格的 for 循環:
for ((i = 0 ; i < 10 ; i++)); do echo $i done
讓我們看另一個例子,顯示 Bash 數組 的所有內容:
#!/bin/bash
distros=(Ubuntu Fedora Debian Alpine)
for i in "${distros[@]}"; do
echo $i
done
如果你運行腳本,它將顯示數組中定義的所有發行版:
Ubuntu
Fedora
Debian
Alpine
Bash 中的 While 循環
while
循環測試一個條件,然後只要條件為真,就繼續循環。
while [ condition ]; do
commands
done
如果你考慮前一個例子,它可以使用 while
循環進行重寫:
#!/bin/bash
num=1
while [ $num -le 10 ]; do
echo $num
num=$(($num+1))
done
如你所見,你首先需要將變數 num
定義為 1,然後在循環體內,你增加 num
的值。只要 num
小於或等於 10,while 循環就會檢查條件並運行腳本。
因此,現在運行腳本將會顯示出和之前 for
循環中看到的完全相同的結果。
1
2
3
4
5
6
7
8
9
10
讓我們看另一個例子。這是一個 Bash 腳本,它接受一個數字作為參數 並顯示該表。
#!/bin/bash
echo "Table for $1 is:"
index=1
while [ $index -le 10 ]; do
echo $(($1*$index))
index=$(($index+1))
done
如果你對 $1
的使用感到困惑,它代表傳遞給腳本的第一個參數。更多的細節可以參考這個系列的 第三章。
如果你運行這個腳本,它應該會顯示以下的輸出:
$ ./table.sh 2
Table for 2 is:
2
4
6
8
10
12
14
16
18
20
Bash 中的 Until 循環
這是一個使用較少的循環格式。它的行為和 while
循環類似。這裡的區別是,循環運行直到它檢查的條件為真為止。意味著為了在循環中執行代碼,[ ]
中的條件必須為假。
我馬上會解釋一下。讓我們先看一下它的語法。
until [ condition ]; do
commands
done
現在,如果我要使用相同的示例,即使用 until
循環列印從 1 到 10 的數字,它看起來會是這樣:
#!/bin/bash
num=1
until [ $num -gt 10 ]; do
echo $num
num=$(($num+1))
done
區別在於條件;其餘部分保持不變。
- 當變數
num
小於或等於 10 時,while 循環就會運行。[ ]
中的條件必須為真,循環才會執行。 - 知道變數
num
變得大於 10 時,until 循環才會運行。[ ]
中的條件必須為假,循環才會執行。
這都是做同樣事情的兩種不同方式。while
更受歡迎,因為你會在大多數編程語言中找到類似 while
的循環語法。
?️ 練習時間
那是有趣的。現在是做一些練習的時候了。
練習 1:編寫一個腳本,該腳本接受一個數字作為參數並列印其表格。如果腳本在沒有參數的情況下運行,你的腳本還應顯示一個消息。
預期輸出:
$: ./table.sh
You forgot to enter a number
$: ./table.sh 3
3
6
9
12
15
18
21
24
27
30
練習 2 : 編寫一個腳本,列出目錄 /var
中的所有文件。
提示 : 對於循環,使用 /var/*
作為 「列表」。
Bash 基礎知識系列即將結束。作為該系列的最後一章,你將在下周學習在 Bash 腳本中使用函數。敬請期待。
(題圖:MJ/945241d6-6a73-432c-9bcd-e0948b3fadc0)
via: https://itsfoss.com/bash-loops/
作者:Abhishek Prakash 選題:lujun9972 譯者:ChatGPT 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive