10 Bash pro příklady smyčky s vysvětlením

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.

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?