Úvod
for
smyčka je základní programovací funkce, která prochází seznamem prvků. Pro každý z těchto prvků for
smyčka provádí sadu příkazů. Příkaz pomáhá opakovat procesy až do ukončení podmínky.
Ať už procházíte řadou čísel nebo přejmenováváte soubory, for
smyčky ve skriptech Bash poskytují pohodlný způsob automatického vypisování položek.
Tento tutoriál ukazuje, jak používat Bash for
smyčky ve skriptech.
Předpoklady
- Přístup k terminálu/příkazovému řádku (CTRL +ALT +T ).
- Textový editor, jako je Nano nebo Vi/Vim.
- Základní terminologie programování.
Bash Script pro smyčku
Použijte for
smyčka pro iteraci seznamu položek k provedení zadaných příkazů.
Základní syntaxe pro for
smyčka ve skriptech Bash je:
for <element> in <list>
do
<commands>
done
Prvek, seznam a příkazy analyzované smyčkou se liší v závislosti na případu použití.
Bash pro příklady smyček
Níže jsou uvedeny různé příklady for
smyčka ve skriptech Bash. Vytvořte skript, přidejte kód a spusťte Bash skripty z terminálu, abyste viděli výsledky.
Jednotlivé položky
Iterujte řadu daných prvků a každý vytiskněte s následující syntaxí:
#!/bin/bash
# For loop with individual numbers
for i in 0 1 2 3 4 5
do
echo "Element $i"
done
Spuštěním skriptu zobrazíte výstup:
. <script name>
Skript vytiskne každý prvek z poskytnutého seznamu do konzole.
Případně použijte řetězce v seznamu odděleném mezerou:
#!/bin/bash
# For loop with individual strings
for i in "zero" "one" "two" "three" "four" "five"
do
echo "Element $i"
done
Uložte skript a spusťte jej z terminálu, abyste viděli výsledek.
Výstup vytiskne každý prvek do konzoly a opustí smyčku.
Rozsah
Místo psaní seznamu jednotlivých prvků použijte syntaxi rozsahu a uveďte první a poslední prvek:
#!/bin/bash
# For loop with number range
for i in {0..5}
do
echo "Element $i"
done
Skript vypíše všechny prvky z poskytnutého rozsahu.
Syntaxe rozsahu funguje také pro písmena. Například:
#!/bin/bash
# For loop with letter range
for i in {a..f}
do
echo "Element $i"
done
Skript odesílá písmena do konzole ve vzestupném pořadí v zadaném rozsahu.
Syntaxe rozsahu funguje pro prvky v sestupném pořadí, pokud je počáteční prvek větší než koncový.
Například:
#!/bin/bash
# For loop with reverse number range
for i in {5..0}
do
echo "Element $i"
done
Výstup uvádí čísla v opačném pořadí.
Syntaxe rozsahu funguje bez ohledu na to, zda se prvky zvyšují nebo snižují.
Rozsah s přírůstkem
Použijte syntaxi rozsahu a přidejte hodnotu kroku, abyste procházeli rozsahem v intervalech.
Například pro výpis sudých čísel použijte následující kód:
#!/bin/bash
# For loop with range increment numbers
for i in {0..10..2}
do
echo "Element $i"
done
Výstup vytiskne každou druhou číslici z daného rozsahu.
Případně opakujte od deseti do nuly odpočítávání po sudých číslech:
#!/bin/bash
# For loop with reverse range increment numbers
for i in {10..0..2}
do
echo "Element $i"
done
Spusťte skript pro tisk všech ostatních prvků z rozsahu v sestupném pořadí.
Přírůstek výměny 2
pro jakékoli číslo menší než vzdálenost mezi rozsahem získáte hodnoty pro různé intervaly.
Příkaz seq
seq
příkaz vygeneruje číselnou řadu. Analyzujte sekvenci v Bash skriptu for
loop jako příkaz pro generování seznamu.
Například:
#!/bin/bash
# For loop with seq command
for i in $(seq 0 2 10)
do
echo "Element $i"
done
Výstup vytiskne každý prvek generovaný seq
příkaz.
seq
příkaz je historický příkaz a není doporučený způsob generování sekvence. Vestavěné metody složených závorek jsou vhodnější a rychlejší.
Styl C
Bash skripty umožňují ve stylu C tři parametry for
výrazy řízení smyčky. Přidejte výraz mezi dvojité závorky takto:
#!/bin/bash
# For loop C-style
for (( i=0; i<=5; i++ ))
do
echo "Element $i"
done
Výraz se skládá z:
- Inicializátor (
i=0
) určuje číslo, od kterého smyčka začíná počítat. - Podmínka zastavení (
i<=5
) označuje ukončení smyčky. - Krok (
i++
) zvýší hodnotui
až do stavu zastavení.
Jednotlivé podmínky oddělte středníkem (;
). Upravte tři hodnoty podle potřeby pro váš případ použití.
Terminál vydává každý prvek, počínaje hodnotou inicializátoru.
Hodnota se zvyšuje o velikost kroku až do stavu zastavení.
Nekonečné smyčky
Nekonečné for
smyčky nemají nastavenou podmínku pro ukončení smyčky. Program běží donekonečna, protože podmínka ukončení neexistuje nebo se nikdy nesplní.
Generování nekonečného for
smyčky, přidejte do Bash skriptu následující kód:
#!/bin/bash
# Infinite for loop
for (( ; ; ))
do
echo "CTRL+C to exit"
done
Chcete-li ukončit provádění skriptu, stiskněte CTRL +C .
Nekonečné smyčky jsou užitečné, když program běží, dokud není splněna určitá podmínka.
Přestávka
Příkaz break ukončí aktuální smyčku a pomůže opustit for
smyčka brzy. Toto chování umožňuje opuštění smyčky před splněním uvedené podmínky.
Chcete-li demonstrovat, přidejte do skriptu Bash následující kód:
#!/bin/bash
# Infinite for loop with break
i=0
for (( ; ; ))
do
echo "Iteration: ${i}"
(( i++ ))
if [[ i -gt 10 ]]
then
break;
fi
done
echo "Done!"
Příklad ukazuje, jak opustit nekonečné for
smyčky pomocí break
. Příkaz Bash if pomáhá kontrolovat hodnotu pro každé celé číslo a poskytuje break
stav. Tím se skript ukončí, když celé číslo dosáhne hodnoty deset.
Chcete-li ukončit vnořenou smyčku a vnější smyčku, použijte break 2
.
Pokračovat
continue
příkaz ukončí iteraci aktuální smyčky. Program pokračuje ve smyčce, počínaje následující iterací. Pro ilustraci přidejte následující kód do Bash skriptu, abyste viděli, jak continue
příkaz funguje v for
smyčka:
#!/bin/bash
# For loop with continue statement
for i in {1..100}
do
if [[ $i%11 -ne 0 ]]
then
continue
fi
echo $i
done
Kód kontroluje čísla od jedné do sta a tiskne pouze čísla dělitelná jedenácti.
Podmíněné if
příkaz kontroluje dělitelnost, zatímco continue
příkaz přeskočí všechna čísla, která mají zbytek při dělení jedenácti.
Pole
Pole ukládají seznam prvků. for
loop poskytuje metodu procházení polí po prvku.
Například definujte pole a procházejte prvky pomocí:
#!/bin/bash
# For loop with array
array=(1 2 3 4 5)
for i in ${array[@]}
do
echo "Element $i"
done
Výstup vytiskne každý prvek uložený v poli od prvního do posledního.
Bash for
loop je jediná metoda pro iteraci jednotlivých prvků pole.
Indexy
Při práci s poli má každý prvek index.
Seznamte se s indexy pole pomocí následujícího kódu:
#!/bin/bash
# For loop with array indices
array=(1 2 3 4 5)
for i in ${!array[@]}
do
echo "Array indices $i"
done
Indexování prvků začíná na nule. Proto má první prvek index nula.
Výstup vypíše čísla od nuly do čtyř pro pole s pěti prvky.
Vnořené smyčky
Chcete-li procházet nebo generovat vícerozměrná pole, použijte vnořené for
smyčky.
Jako příklad vygenerujte desetinné hodnoty od nuly do tří pomocí vnořených smyček:
#!/bin/bash
# Nested for loop
for (( i = 0; i <= 2; i++ ))
do
for (( j = 0 ; j <= 9; j++ ))
do
echo -n " $i.$j "
done
echo ""
done
Kód dělá následující:
- Řádek 1 spustí
for
smyčka na nule, zvyšuje se o jednu a končí na dvou, včetně. - Řádek 3 spustí vnořený
for
smyčka na nule. Hodnota se zvýší o jednu a skončí na devíti včetně. - Řádek 5 vytiskne hodnoty z
for
smyčky. Vnořený for prochází všechna čísla třikrát, jednou pro každou hodnotu vnější smyčky.
Výstup vytiskne každou číselnou kombinaci do konzole a při outer zadá nový řádek smyčka dokončí jednu iteraci.
Řetězce
Chcete-li procházet slova v řetězci, uložte řetězec do proměnné. Poté proměnnou analyzujte na for
smyčka jako seznam.
Například:
#!/bin/bash
# For loop with string
strings="I am a string"
for i in ${strings}
do
echo "String $i"
done
Smyčka prochází řetězcem, přičemž každé slovo je samostatný prvek.
Výstup vytiskne jednotlivá slova z řetězce do konzole.
Soubory
for
smyčka v kombinaci s prohledáváním blízkosti pomáhá vyjmenovat nebo upravit soubory, které splňují určitou podmínku.
Například vypište všechny skripty Bash v aktuálním adresáři s for
smyčka:
#!/bin/bash
# For loop with files
for f in *.sh
do
echo $f
done
Skript prohledá aktuální adresář a zobrazí seznam všech souborů s příponou .sh rozšíření.
Procházejte soubory nebo adresáře a automaticky přejmenujte nebo změňte oprávnění pro více prvků najednou.
Náhrada příkazů
for
smyčka přijímá substituci příkazů jako seznam prvků, kterými se má iterovat.
Následující příklad ukazuje, jak zapsat for
smyčka se substitucí příkazů:
#!/bin/bash
# For loop with command substitution
list=`cat list.txt`
# Alternatively, use list=$(cat list.txt)
for i in $list
do
echo $i
done
Komentář Bash nabízí alternativní syntaxi pro nahrazení příkazů. Kód přečte obsah souboru list.txt pomocí cat
a uloží informace do proměnné list
.
Použijte metodu substituce příkazů k přejmenování souborů ze seznamu názvů uložených v textovém souboru.
Poznámka: Naučte se používat příkaz cat a smyčku for ke čtení souborů řádek po řádku v Bash.
Argumenty příkazového řádku
Použijte for
smyčka pro iteraci argumentů příkazového řádku.
Následující příklad kódu ukazuje, jak číst argumenty příkazového řádku v for
smyčka:
#!/bin/bash
# For loop expecting command line arguments
for i in [email protected]
do
echo "$i"
done
Při spuštění skriptu Bash zadejte argumenty příkazového řádku.
Například:
. <script name> foo bar
[email protected]
nahradí každý argument příkazového řádku for
smyčka.
Závěr
Po prostudování tohoto návodu víte, jak používat for
smyčka ve skriptech Bash pro iteraci seznamů.
Dále se naučte psát a používat funkce Bash.