For Loop je nedílnou součástí každého programovacího jazyka. Umožňuje programům procházet určitým počtem položek.
Pokud například chcete procházet seznamem nebo polem položek ‚n‘, použijete a for Loop. Vezměme si jednoduchý příklad:
1Violet2Indigo3Blue4GreenRainbow Table
K provedení jakýchkoli akcí nebo k iteraci položek ve výše uvedené tabulce potřebujeme smyčku For.
Table of Contents
Bash For Loop
Ve skriptu bash je syntaxe For Loop následující:
#!/bin/bash for VAR in 1 2 3 4 5.....N do ACTION 1 ACTION 2 ..... done
Bash For Loop je docela přímočarý. První řádek #!/bin/bash označuje, že kód je bash skript. VAR znamená dočasnou proměnnou používanou pro opakování. N označuje maximální počet iterací. „do“ a „done“ spustí a zastaví smyčku. Akce jsou příkazy, které se provádějí v rámci smyčky.
Bash For Loop můžeme spustit s různými proměnnými, jako je seznam, řetězce, celá čísla a pole. Tento článek ukáže několik běžných příkladů Bash For Loop.
Tyto programy můžete spouštět přímo na příkazovém řádku bash nebo je uložit do souboru a spustit soubor pomocí příkazu Bash filename.sh.
Čtení statického seznamu
Zvažte následující seznam – rainbowColorList = fialová, indigová, modrá, zelená, žlutá, oranžová, červená
Výše uvedený seznam řetězců můžeme vytisknout pomocí Bash For Loop takto:
#! /bin/sh # Define the list rainbowColorList=Violet,Indigo,Blue,Green,Yellow,Orange,Red # Comma separator pattern using //,/ for colors in ${rainbowColorList//,/ } do echo $colors done
Výstupem bude seznam položek na novém řádku.
#Output Violet Indigo Blue Green Yellow Orange Red
Čtení pole
Syntaxe pro deklaraci pole je odlišná. Pro každý prvek (String) použijte závorky.
rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red") for colors in "${rainbowArray[@]}"; do echo "I like $colors" done
‚@‘ se používá k iteraci každým prvkem v poli.
#Output I like Violet I like Indigo I like Blue I like Green I like Yellow I like Orange I like Red
Můžeme také použít For Loop k tisku indexů a prvků pole.
#Printing with index rainbowArray=("Violet" "Indigo" "Blue" "Green" "Yellow" "Orange" "Red") for i in "${!rainbowArray[@]}"; do echo "Color at index " $i " : " "${rainbowArray[$i]}" i=$((i+1)); done
#Output Color at index 0 : Violet Color at index 1 : Indigo Color at index 2 : Blue Color at index 3 : Green Color at index 4 : Yellow Color at index 5 : Orange Color at index 6 : Red
Všimněte si, že používáme ‚!‘ ve smyčce, abyste získali index prvku.
Iterování rozsahu čísel
Bash For Loop můžeme použít k iteraci přes rozsah čísel.
#iterating over range of numbers echo "Countdown begins..." for N in {10..0} do echo "$N" done
„..“ označuje rozsah čísel.
#Output 10 9 8 7 6 5 4 3 2 1 0
Čísla počítání můžeme také přeskočit zadáním rozsahu.
V níže uvedeném příkladu přeskočíme počítání o 3.
#iterating with skip counting echo "Countdown begins..." for N in {30..0..3} do echo "$N" done
Výše uvedený program začíná číslem 30 jako prvním číslem a počítá dolů do 0. Poslední parametr ve smyčce for ‚3‘ udává číslo počtu přeskočení.
#Output 30 27 24 21 18 15 12 9 6 3 0
Řetězce a znaky
S Bash For Loop můžeme dělat spoustu zajímavých operací s řetězci.
Například můžeme číst každý znak řetězce pomocí operátoru ‚seq‘ ve smyčce For:
#read characters of a string myword="welcome" for i in $(seq 1 ${#myword}) do echo "${myword:i-1:1}" done
Všimněte si, že ‚seq‘ by mělo začínat 1, abyste získali první znak jako první.
#Output W e l c o m e
Řetězce oddělené mezerou můžeme také vytisknout jeden po druhém:
#read each word from a sentence mysentence="Welcome to etechblog.cz. One stop hub for all techies" for word in $mysentence; do echo $word done
#Output Welcome to etechblog.cz. One stop hub for all techies
Výrazy
Podobně jako u jakéhokoli jiného programovacího jazyka, jako je Java, můžeme umístit výrazy do Bash For Loop.
for (( var=10; var>=0; var-- )) do echo "Counting down...$var" done
#Output Counting down...10 Counting down...9 Counting down...8 Counting down...7 Counting down...6 Counting down...5 Counting down...4 Counting down...3 Counting down...2 Counting down...1 Counting down...0
Čtení argumentů příkazového řádku
Ke čtení z argumentů příkazového řádku používáme příkaz ‚read‘. V níže uvedeném příkladu získáme od uživatele několik čísel a vytiskneme součet pomocí Bash For Loop. Proměnnou total používáme k uložení mezilehlého a konečného součtu nebo součtu čísel.
read -a array -p "Enter the numbers you want to add:" total=0 for i in ${array[@]}; do let total+=$i done echo "Sum of the numbers is: $total"
Výstup je:
#Output Enter the numbers you want to add: 3 4 66 Sum of the numbers is: 73
Hledání lichých-sudých čísel
Abychom našli lichá a sudá čísla mezi 1 až 10 (nebo libovolné číslo N), měli bychom použít podmínku if spolu s Bash pro smyčku. Abychom určili sudé číslo, vydělíme číslo 2 a pokud je zbytek 0, kategorizujeme ho jako sudé jinak liché.
#declare the list where the even and odd numbers will be sorted and kept evennum="" oddnum="" for (( i=1; i<=10; i++ )) do remainder=$(( $i % 2 )) if [ $remainder -eq 0 ]; then evennum="$evennum $i " else oddnum="$oddnum $i " fi done echo "Even numbers are: "$evennum echo "Odd numbers are: "$oddnum
Všimněte si, že ve výše uvedeném příkladu uvádíme rozsah jako 10. Toto číslo můžeme změnit, abychom získali sudá a lichá čísla mezi libovolným rozsahem. Můžete se také pokusit přečíst číslo od uživatele pomocí příkazu ‚read‘, který jsme se naučili v předchozí části.
#Output Even numbers are: 2 4 6 8 10 Odd numbers are: 1 3 5 7 9
Nekonečná smyčka
Infinity nebo infinite Loop je smyčka, která se nepřestává vykonávat a program musí být nucen přestat používat Ctrl+C. Můžeme snadno vytvořit nekonečnou smyčku pomocí ‚; ;‘ operátor uvnitř smyčky for:
for (( ; ; )) do echo "Welcome to etechblog.cz" done
#Output Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz Welcome to etechblog.cz ^C $
Prohlášení o přerušení
Příkazy Break se používají k přerušení smyčky, když je splněna podmínka ‚if‘.
for color in Violet Indigo Blue Green Yellow Orange Red do if [[ "$color" == 'Green' ]]; then break fi echo "Searching for Green, the color now is $color" done echo "I found my color $color"
V tomto příkladu se snažíme najít zelenou barvu. For-Loop prochází každou barvou a jakmile je nalezena zelená barva, program opustí smyčku kvůli příkazu break.
#Output Searching for Green, the color now is Violet Searching for Green, the color now is Indigo Searching for Green, the color now is Blue I found my color Green
Pokračovat v prohlášení
Pokračovat se používá k přeskočení aktuální smyčky a přechodu na další na základě určité podmínky. Pokud například nechcete tisknout barvu ‚Zelenou‘ z našeho předchozího programu, můžeme dát Pokračovat a zobrazí se všechny ostatní barvy kromě Zelené.
for color in Violet Indigo Blue Green Yellow Orange Red do if [[ "$color" == 'Green' ]]; then continue fi echo "$color" done
#Output Violet Indigo Blue Yellow Orange Red
Závěrečná slova
Pokryli jsme nejběžnější použití Bash For Loop pomocí řetězců, celých čísel, polí a seznamu. Pokud se učíte Linux, ale máte počítač s Windows 10, můžete použít funkci WSL a nainstalovat Linux na svůj počítač s Windows.
Poté můžete použít terminál Linux podobným způsobem jako CMD.
Dále se můžete podívat na Jak spouštět bash skripty pomocí Pythonu?