Linux Bash 腳本中的 9 個 For 循環示例

多才多藝的狂歡 for loop 的作用遠不止循環給定的次數。 我們描述了它的許多變體,以便您可以在自己的 Linux 腳本中成功使用它們。

for 循環

所有腳本和編程語言都有一些處理循環的方法。 循環是要重複執行的一段代碼。 循環不會一遍又一遍地在腳本中編寫相同的指令集,而是一遍又一遍地重複一段代碼。

聚會 for 循環非常靈活。 它可以處理數字、單詞、數組、命令行變量或其他命令的輸出。 這些在循環頭中使用。 標頭指示循環正在處理的內容:例如數字或字符串。 示例——以及停止循環的最終條件是什麼。

循環體包含要重複的代碼。 包含您希望循環執行的操作。 循環體可以包含任何有效的腳本命令。

稱為循環計數器或迭代器的變量用於循環遍歷一系列值或數據項列表。 對於每個循環,迭代器獲取下一個數字、字符串或循環迭代的任何數據類型的值。 這允許循環處理每個數據項的值,甚至在某些情況下可以操作數據項本身。

簡單的 for 循環

如果您正在尋找編寫您的第一個 for 循環,這些簡單的示例將幫助您入門。

使用數字列表的 for 循環

你可以運行一個 for 在命令行上循環。 此命令創建並執行一個簡單的 for 圓圈。 迭代器是一個名為 i . 讓我們分配 i 依次是數字列表中的每個值。 循環體將該值打印到終端窗口。 結束這個循環的條件是當 i 已經遍歷了整個數字列表。

                      for i in 1 2 3 4 5; do echo $i; done
                    

這裡需要注意的是變量 i 每次循環轉動時增加一,但這是因為數字列表每次增加一。

這個數字列表從 3 開始,以 2 為步長上升,然後任意跳到 44。

                      for i in 3 5 7 9 11 44; do echo $i; done
                    

un ciclo for contando a través de una lista no secuencial de números

它沒有任何區別 for 圓圈。 從列表的一端開始,依次使用每個值,直到列表中的所有值都被使用完。

數字也不必按升序排列。 它們可以按任何順序排列。

                      for i in 3 43 44 11 9; do echo $i; done
                    

un bucle for contando a través de una lista desordenada de números

使用 Word Liza 的 for 循環

我們可以很容易地用文字做同樣的事情。 將腳本文本複製到編輯器中並將其保存為“word-list.sh”。

                      #!/bin/bash

for word in This is a sequence of words
do 
  echo $word
done
                    

你將不得不使用 chmod 使腳本和您從本文複製的任何其他腳本可執行。 每次使用時只需替換腳本名稱 chmod 領域。

                      chmod +x word-list.sh
                    

Haciendo un script ejecutable con chmod

讓我們運行腳​​本。

                      ./word-list.sh
                    

Un bucle for trabajando a través de una lista de palabras

就像你對數字所做的那樣,迭代器,在這個例子中變量 word :遍歷數據項列表,直到到達列表末尾。 循環體訪問 word 變量,因此列表中的每個單詞都會被處理。

具有數字範圍的 for 循環

如果你想要一個 for 循環運行 100 次,必須在循環頭中寫入 100 個數字的序列會非常乏味。 數字範圍允許您僅指定第一個和最後一個數字。

這個腳本是“number-range.sh”。

                      #!/bin/bash

for i in {1..10}
do
  echo "Loop spin:" $i
done
                    

數字範圍在方括號中定義“ {} “帶冒號” .. ” 分隔範圍開始和結束的數字。 確保不要在範圍定義中包含任何空格。

是這樣的嗎:

                      ./number-range.sh
                    

Un bucle for usando un rango de números

您可以包含另一個數字,該數字定義迭代器應該使用的步長來遍歷範圍內的數字。 此腳本“number-range2.sh”將使用 0 到 32 的範圍和 4 的步長。

                      #!/bin/bash

for i in {0..32..4}
do
  echo "Loop spin:" $i
done
                    

迭代器以四步遍歷數字範圍。

                      ./number-range2.sh
                    

Un bucle for usando un paso de iterador de 4

使用文件名的 for 循環

由於我們可以處理單詞列表,我們可以讓我們的腳本使用文件名。 該腳本稱為“filenames.sh”。

                      #!/bin/bash

for file in word-list.sh number-range.sh number-range2.sh filenames.sh
do
  ls -lh "$file"
done
                    

擁有一個只做某事的腳本將毫無用處 ls 可以,但它演示瞭如何訪問循環體內的文件名。

                      ./filenames.sh
                    

Un bucle for usando una lista de nombres de archivo

與使用數字範圍類似,我們可以在循環頭中使用文件模式來指定我們要處理的文件。 這節省了大量的打字,意味著我們不需要提前知道文件名。

該腳本稱為“filenames2.sh”。 我們已將文件名列表替換為文件名模式“*.sh”,以便腳本報告當前目錄中的所有腳本文件。

                      #!/bin/bash

for file in *.sh
do
  ls -lh "$file"
done
                    

這是輸出。

                      ./filenames2.sh
                    

Un bucle for usando un patrón de archivo de *.sh

使用命令行參數的 for 循環

我們可以通過在命令行上傳遞文件名模式來增加一些靈活性。 這 $* 該變量表示傳遞給腳本的所有命令行參數。

這是“filenames3.sh”。

                      #!/bin/bash

for file in $*
do
  ls -lh "$file"
done
                    

我們將要求以“n”開頭並具有 SH 擴展名的文件名。

                      ./filenames3.sh n*.sh
                    

Un bucle for que toma un patrón de archivo como parámetro de línea de comando

我們也可以一次傳入多個模式。

                      ./filenames3.sh n*.sh .bashrc
                    

Un bucle for que toma un patrón de archivo y los parámetros de línea de comando de un nombre de archivo

迭代器變量 file 獲取每個命令行參數的值。 文件名模式被擴展,所有文件名都在循環體中處理。

如何在 Bash 中使用變量

C 型循環

Bash 支持經典的三項 for 循環,就像在 C 編程語言中發現的那樣。它們被稱為三項 for 循環,因為循環頭中有三個項。

  • 循環迭代器的初始值。
  • 循環是否繼續或結束的測試。
  • 迭代器的增量或減量。

這個腳本是“c-like.sh”。

迭代器 I 在循環開始時設置為1,循環將執行while語句” i<=10 “ 是真的。 立刻 i 到了 11 點, for 循環將停止。 循環每轉一圈,迭代器就加一。

                      #!/bin/bash

for (( i=1; i<=10; i++ ))
do 
  echo "Loop number:" $i
done
                    

讓我們運行這個腳本。

                      ./c-like.sh
                    

Un bucle for de tres términos o similar a C

c型 for 循環允許輕鬆創建 for 有稍微奇怪的要求的循環。 這個循環從 15 開始,以 3 為步數倒計時。這是“c-like2.sh”

                      #!/bin/bash

for (( i=15; i>0; i-=3 ))
do 
  echo "Loop number:" $i
done
                    

當我們執行它時,它應該以三步跳回。

                      ./c-like2.sh
                    

Un ciclo tipo C para contar hacia atrás

無限循環

你也可以使用這種格式 for 循環創建一個無限循環。 您需要做的就是從循環頭中刪除所有元素,就像這樣。 這是“infinity.sh”。

                      #!/bin/bash

for (( ; ; ))
do
  echo "Press Ctrl+C to stop..."
  sleep 1
done
                    

您需要按 Ctrl+C 來停止循環。

                      ./infinite.sh
                    

Un bucle for infinito tipo C

使用單詞修復的 for 循環

我們可以輕鬆地遍歷單詞數組。 我們需要在循環頭中提供數組的名稱,迭代器將遍歷數組中的所有條目。 這是“word-array.sh”。

                      #!/bin/bash

distributions=("
                      
                        Ubuntu
                      
                       Fedora Manjaro Arch EndeavourOS Garuda")

for distro in $distributions
do
  echo $distro
done
                    

為我們列出了所有發行版。

                      ./word-array.sh
                    

Un bucle for usando una matriz de palabras

繼續命令

如果您希望循環遍歷特定輸入,請測試迭代器是否匹配該輸入並使用 continue 領域。 這 continue 該命令離開循環的當前輪次。 遞增迭代器並開始下一輪循環,假設您要跳過的條目不是列表中的最後一項。

這是“word-array2.sh”。 循環遍歷數組條目“Arc”,但處理數組的所有其他成員。

                      #!/bin/bash

distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

for distro in $distributions
do
  if [[ "$distro" == "Arch" ]] ;
    then
    continue
  fi
  echo $distro
done
                    

“弧”不會出現在終端窗口中。

                      ./word-array2.sh
                    

Un bucle for salta una entrada en una matriz de palabras debido al comando continuar

中斷命令

break 該命令退出循環並阻止進一步處理。

這是“word-array3.sh”。 它與上面的腳本相同 continue 取而代之 break .

                      #!/bin/bash

distributions=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda")

for distro in $distributions
do
  if [[ "$distro" == "Arch" ]] ;
    then
    break
  fi
  echo $distro
done
                    

當迭代器包含“Arch”時,for 循環放棄任何進一步的處理。

                      ./word-array3.sh
                    

Un bucle for que abandona el procesamiento posterior debido al comando break

使用關聯數組的 for 循環

在 Bash 4 及更高版本中,關聯數組允許您創建可以按鍵或按值搜索的鍵值對列表。 由於鍵和值之間的雙向關係,它們也被稱為數據字典。

我們可以使用 a 遍歷關聯數組 for 圓圈。 這個腳本是“associative.sh”。 定義一個具有四個條目的關聯數組,“dog”、“cat”、“robin”和“human”各有一個。 這些是關鍵。 這些值是每條腿的(默認)數量。

                      #!/bin/bash

declare -A animals=( [dog]=Four-legged [cat]=Four-legged [robin]=Two-legged [human]=Two-legged )

for legs in ${!animals[@]}
do
  if [ ${animals[$legs]} == "Two-legged" ]; then 
    echo ${legs}
  fi
done
                    

迭代器被稱為 legs . 請注意,循環頭包含一個“ ! ”感嘆號。 這不像邏輯 NOT 運算符,它是關聯數組語法的一部分。 需要在數組中進行搜索。

循環體執行字符串比較測試。 如果數組成員的值為“雙腿”,則將鍵的值打印到終端窗口。 當我們運行它時,腳本會打印出兩條腿的生物。

                      ./associative.sh
                    

Usar un bucle for para extraer elementos de una matriz asociativa

迭代命令的輸出

如果你有一個命令或腳本產生一個列表,比如文件名,你可以用 for 圓圈。 您必須小心意外的文件名擴展,但在簡單的情況下它很好。

這個腳本是“command.sh”。 用途 ls wc 提供腳本文件名的有序列表,以及它們的行數、字數和字節數。

                      #!/bin/bash

for i in $(ls *.sh | sort);
do 
  echo $(wc $i)
done
                    

當我們運行它時,我們會得到每個文件的統計信息,文件按字母順序列出。

                      ./command.sh
                    

Uso de un bucle for para iterar sobre la salida de dos comandos canalizados

令人眼花繚亂的 for 循環

for loop 是一個通用且易於理解的腳本工具。 但儘管它很靈活,但不要忘記其他循環的存在是有原因的。 不要眼花繚亂地想著 for 循環就是你所需要的。

while 例如,循環比循環更適合某些事情 for 循環,就像從文件中讀取行一樣。

編寫好的腳本意味著使用最適合手頭任務的工具。 這 for loop 是一個很棒的工具,可以放在你的作弊工具箱中。

相關文章