Linux中國

Bash 基礎知識系列 #8:For、While 和 Until 循環

Bash 基礎知識系列的倒數第二章節,學習 forwhileuntil 循環。

循環是任何編程語言中的一個強大功能。如果你還不知道,循環其實是一種根據某些條件重複代碼的方式。

例如,想像一下你需要列印從 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 。關於括弧擴展的更多信息,可以在這篇文章中找到。

在 Bash 中使用括弧擴展

? 如果你熟悉 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國