GNU/Linux >> Znalost Linux >  >> Linux

Bash skript pro smyčku vysvětlený s příklady

Ú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ýší hodnotu i 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.


Linux
  1. Bash pro průvodce smyčkou a příklady

  2. Linux unexpand Command Vysvětlený pro začátečníky (s příklady)

  3. Příklady Bash for Loop a While Loop

  1. Jak napsat Bash skript s příklady

  2. Bash For Loop

  3. Bash for smyčky Příklady

  1. Příkaz Linux mkdir vysvětlený pro začátečníky (s příklady)

  2. Vysvětlení příkazu Linux cut pro začátečníky (s příklady)

  3. Bash For Loop s praktickými příklady