GNU/Linux >> Znalost Linux >  >> Linux

Bash Scripting Part2 – Smyčky For a While s příklady

V první části tohoto návodu Bash Scripting jsme diskutovali o tom, jak napsat Bash skript. Prozkoumali jsme různá použití a jedinečné scénáře, ve kterých se mohou Bash skripty hodit, což je skvělý příklad toho, jak neuvěřitelné mohou být.

V této části tutoriálu se podíváme na for příkaz a while příkaz. Ukážeme si, jak můžeme tyto příkazy použít k vytváření smyček pro iteraci sérií hodnot.

Smyčka For

V Linuxu je smyčka to, co používáme k opakovanému provádění příkazů v zadaném intervalu. Smyčky se ke stejnému účelu používají ve velkém množství programovacích jazyků.

V Linuxu existuje několik různých typů smyček, ale v této části článku se zaměříme na for smyčka.

#!/bin/bash

 for y in a b c d w x y z 

> do

> echo $y

done

Jak můžete vidět na obrázku výše, přiřadili jsme proměnnou „y“ – což je jen bezvýznamný zástupný symbol používaný pro účely příkazu – několika písmenům abecedy.

Poté jsme tuto proměnnou předali do echo příkaz a byl schopen vypsat naše písmena níže.

Iterace přes jednoduché hodnoty

Můžeme použít for příkaz ve skriptu Bash. K tomu musíme nejprve vytvořit textový soubor v našem linuxovém terminálu. Můžete použít touch příkaz pro snadné vytváření textových souborů.

$ touch script

Výše uvedená syntaxe vytvoří textový soubor, který budeme nazývat „script“. Ujistěte se, že jste vytvořili textový soubor pomocí .sh rozšíření souboru. Po vytvoření script , budeme chtít upravit v našem skutečném skriptu obsahujícím for příkaz.

Můžeme toho dosáhnout spuštěním několika různých příkazů pro úpravu textových souborů, jako je nano příkaz a vi příkaz atd.

Doporučujeme však použít pouze nano , protože je to jeden z nejjednodušších a nejsnadněji použitelných příkazových textových editorů v Linuxu.

$ nano script

Výše uvedená syntaxe otevře náš script v textovém editoru nano. Zde budeme chtít napsat náš skript.

Upozorňujeme, že tento textový soubor musí obsahovat #!/bin/bash , který informuje skript Bash o tom, který shell má použít, takže je klíčovou součástí úspěšného vytvoření skriptu Bash.

#!/bin/bash

for var in first second third fourth fifth; do

	echo The $var item

done

Opakování přes složité hodnoty

V předchozím příkladu jsme si ukázali, jak použít for příkaz k iteraci jednoduchých hodnot v Bash skriptu vytvořeném uživatelem. Slovo jednoduchý zde odkazuje na hodnoty, které obsahují pouze jediné slovo.

Někdy však budete mít seznam, který obsahuje – namísto toho, co jsme viděli v předchozím příkladu s „prvním“ – něco ve smyslu „prvního“, který náhodou obsahuje více než jedno slovo pro jednu hodnotu. Tyto hodnoty nazýváme „komplexní“ hodnoty.

Pokud váš seznam tyto komplexní hodnoty obsahuje, budete je muset uvést v uvozovkách, aby skript pochopil, že jde pouze o jednu hodnotu.

#!/bin/bash

for var in first "the second" "the third" "I’ll do it"; do

	echo "This is: $var"

done

Náhrada příkazů

Můžeme také použít substituci příkazů v našem for příkaz v našem skriptu Bash.

#!/bin/bash

my_file="file01"

for var in $(cat $my_file); do

        echo " $var"

done

Zde jsme použili substituci příkazu subshellem Bash, jak je patrné z použití příkazu cat uvnitř $( ); to nám umožňuje použít výstup z cat a získejte obsah souboru za předpokladu, že každý řádek má jedno slovo.

Ale pokud jsou v jednom z těchto řádků mezery, každé slovo bude považováno za pole. V tomto případě budete muset shellu sdělit, aby nové řádky považoval za oddělovač namísto mezer.

Oddělovač polí

Ve výchozím nastavení jsou následující znaky prostředím Bash považovány za pole.

  • Vesmír
  • Tab
  • nový řádek

Pokud váš text obsahuje některý z těchto znaků, shell bude předpokládat, že se jedná o nové pole, a pokud tyto znaky potřebujete použít, budete muset změnit interní oddělovač polí nebo proměnnou prostředí IFS.

$ IFS=$’n’

Výše uvedená syntaxe způsobí, že shell Bash bude považovat nové řádky za oddělovač namísto znaku mezery.

#!/bin/bash

file="/etc/passwd"

IFS=$'n'

for var in $(cat $file); do

	echo " $var"

done

Oddělovač polí můžete také přiřadit dvojtečkám pomocí IFS jak je uvedeno níže.

$ IFS=:

Docela fantastické, co?

Iterace přes soubory adresáře

Můžete také použít for smyčkou ve skriptu Bash, abyste vypsali soubory ve vašem domovském adresáři.

#!/bin/bash

for obj in /home/ubuntu/*; do

	if [ -d "$obj" ]; then

		echo "$obj is a folder"

	elif [ -f "$obj" ]; then

		echo "$obj is a file"

	fi

done

Tento proces vyžaduje, abyste použili if příkaz ke kontrole souborů a složek. To by vám ale nemělo činit velký problém, pokud jste si přečetli předchozí příspěvek. Ale pokud byste si to náhodou potřebovali zopakovat, doporučoval bych si to přečíst.

V našem skriptu Bash jsme použili zástupný znak zvaný hvězdička (*), který obsahuje for smyčka, která nám umožňuje zobrazit seznam souborů a složek v našem domovském adresáři. Ve skriptování Bash se tento proces nazývá „globování souborů .“ Soubor globbing znamená všechny existující soubory s názvem.

Všimněte si, že proměnné v našem if příkazy jsou psány s uvozovkami, protože názvy souborů nebo složek mohou obsahovat mezery. Pokud bychom tento krok vynechali, možná bychom nebyli schopni vypsat všechny soubory a adresáře.

Iterujte přes řádky souboru

Můžeme použít for smyčka ve skriptu Bash pro iteraci obsahu souboru:

#!/bin/bash

IFS=$'n'

for text in $(cat /etc/passwd); do

	echo "This line $text ++ contains"

	IFS=:

	for field in $text; do

		echo " $field"

	done
done

Zde máme dvě smyčky, první smyčka iteruje přes řádky souboru a oddělovač je nový řádek, druhá iterace je přes slova na samotném řádku a oddělovač je dvojtečka :

data souboru

Tento nápad můžete použít, když máte soubor CSV nebo jakýkoli soubor s hodnotami oddělenými čárkami. Myšlenka je stejná; stačí změnit oddělovač tak, aby vyhovoval vašim potřebám.

Pro smyčku C-Style

Pokud jste obeznámeni s jazykem C, možná si všimnete, že na for je něco trochu mimo v Linuxu občas zacyklí.

Důvodem je, že existují dva způsoby zápisu for smyčky; standardní způsob Linuxu, který jsme již probrali na začátku tohoto tutoriálu, a způsob „ve stylu C“.

for (var= 0; var < 5; var++)

{

printf(“number is %dn”, var);

}

Výše uvedená syntaxe je pro for smyčka napsaná v C. for ve stylu C smyčka v Linuxu je napsána velmi podobně jako tato s několika malými změnami, které lze pozorovat níže.

for (( proměnná =začátek; podmínka; krok iterace))

for (( var = 1; var < 5; var++ ))

Abychom pomohli lépe vykreslit obrázek, zahrneme příklad Bash skriptu ve stylu C for smyčky v našem linuxovém terminálu.

#!/bin/bash

for ((var = 1; var <= 10; var++)); do

	echo "number is $var"

done

Vložte to do našeho textového souboru a spusťte to.

Příkaz Continue

Bash continue příkaz ignoruje příkazy uvnitř vnější smyčky pro aktuální iteraci a předá řízení další iteraci. Tento příkaz můžete použít k zastavení provádění zbývajících příkazů uvnitř smyčky, aniž byste smyčku opustili.

V následujících několika příkladech se dostaneme k tomu, jak lze tento příkaz použít ve skriptovacích smyčkách Bash v Linuxu.

Příkaz Break

Příkaz break můžete použít k ukončení libovolné smyčky, jako jsou smyčky while a till.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

Cyklus běží, dokud nedosáhne 14, poté příkaz smyčku opustí.
Několik dalším příkladům tohoto příkazu se dostaneme o něco později.

The While Loop

Smyčka for není jediným způsobem smyčkování ve skriptování Bash. while smyčka dělá stejnou práci, ale před každou iterací kontroluje podmínku. Struktura while smyčku můžete vidět níže.

while [ condition ]

do

    commands

done

Uvedeme příklad se skriptem Bash.

#!/bin/bash

number=10

while [ $number -gt 4 ]; do

	echo $number

	number=$(($number - 1))

done

Způsob, jakým tento Bash skript funguje, je jednoduchý; začíná znakem while příkaz ke kontrole, zda je číslo větší než nula, pak spustí cyklus a hodnota čísla se sníží pokaždé o 1. Při každé iteraci smyčky skript vypíše hodnotu čísla. Cyklus bude probíhat, dokud toto číslo nedosáhne 0.

Vnořené smyčky

Smyčky můžete vytvářet uvnitř jiných smyček, jako je while například smyčka. Tyto smyčky v rámci smyčky se nazývají vnořené smyčky. Ponoříme se do nich tak, že nejprve prozkoumáme, jak vytvořit vnořené for smyčka v následujícím příkladu.

Více smyček for (vnořené pro)

V předchozích příkladech tohoto tutoriálu jsme si ukázali, jak vytvořit for smyčky ve skriptu Bash v Linuxu. Existuje však také něco, čemu říkáme vnořené for smyčky. Jedná se o smyčky v rámci jiných smyček, nebo jednoduše řečeno více smyček.

Ukážeme vám jednoduchý příklad, jak to vypadá, spolu s jeho krátkým prozkoumáním a popisem níže.

for y in a b c d e f

do

    for u in a b c d e f

    do

        echo "$y$u"

    done

done

Jak můžete vidět na obrázku výše, výstup, který obdržíme při spuštění našeho skriptu v terminálu příkazového řádku Linuxu, zní následovně:náš vzorový text v každém for smyčka je „a b c d e f“.

Náš skript dělá echo textu ve vnější smyčce vedle textu z vnitřní smyčky.

Skript pokračuje ve výstupu prvního pole (v tomto případě mezery, vysvětlíme si to trochu později) textu ve vnější smyčce, dokud nebude vydáno každé pole obsažené ve vnitřní smyčce.

Po dokončení výstupu vnitřní smyčky začne náš skript Bash vydávat následující pole textu ve vnější smyčce.

Celý tento proces se bude opakovat, dokud nebude každé pole každé smyčky kompletně vytištěno ve výstupu vašeho linuxového terminálu.

Vícenásobná smyčka while (vnořená while)

Stejně jako vnořené for příkazové smyčky, existuje také vnořený while příkazové smyčky. Ty fungují úplně stejně jako vnořené smyčky pro for příkaz; smyčka uvnitř jiné smyčky.

Níže uvedená syntaxe se bude nápadně podobat běžnému while smyčka jako struktura vnořeného while loop je jednoduše rozšířená forma základu while smyčky, kterou lze pozorovat v syntaxi níže.

while [condition]

do 

  statements1 

  statements2

  while [condition]

do

  continue

done

  statements3

done

Výše uvedená syntaxe bude provádět zadané úkoly, dokud nebudou splněny podmínky, které jste vybrali. Tomu se říká smyčka. Ale protože smyčka ve výše uvedeném příkladu je vnořená, znamená to, že jednou z úloh, které jsme zmínili výše, je další smyčka samotná.

Při dalším

Ukázali jsme, jak while smyčka a for smyčka může být velmi užitečná pro provádění složitých procesů pomocí Bash skriptů v Linuxu.

Někdy však z různých důvodů budete muset zabít jednu ze smyček ve skriptu Bash. Tento scénář, jakkoli to zní brutálně, se často vyskytuje při práci se správou systému. Takže byste se možná chtěli seznámit s tímto konceptem.

V shellu Bash, break a continue může poskytnout potřebné nástroje pro řízení toku vašich smyček skriptů Bash.

Na několika příkladech níže si ukážeme, jak tyto příkazy fungují jednotlivě.

Syntaxe pro použití brea příkaz pro ukončení while smyčka je následující:

$  while [ condition ]
do
    commands
continue
done

continue příkaz break příkazy fungují velmi podobně a lze je považovat za vzájemné protiklady; continue příkaz funguje přesně jako break pouze pokračuje ve smyčce, místo aby ji zabil.

Ukončit smyčku

break příkaz ukončí aktuální smyčku a předá řízení dalšímu příkazu po této smyčce. Tento proces můžete použít k ukončení smyček, jako je for ,while , atd. Syntaxe break příkaz je následující:

$ while [ condition ]
do
    commands
break
done

Ale jak jsme zmínili výše, oba continue příkaz a break příkaz lze použít pro další smyčky skriptů Bash kromě while smyčka. Ukážeme si, jak je používat v for smyčka.

Konec pro smyčku

Tyto příkazy řízení smyčky můžete použít v for smyčka. Použijeme break příkaz pro ukončení for smyčka v našem skriptu Bash.

#!/bin/bash

for number in 10 11 12 13 14 15; do

	if [ $number -eq 14 ]; then

		break

	fi

	echo "Number: $number"

done

for smyčka běží, dokud nedosáhne čísla, které jsme zadali ve skriptu bash, což je 14. Po dosažení našeho zadaného čísla se break příkaz ukončí for smyčka.

Příkaz Break If

Právě jsme ukázali, jak můžeme použít break příkaz pro ukončení for smyčky, ale tento příkaz můžeme také použít k ukončení if příkaz uvnitř těchto smyček Bash skriptů.

i=0

while [[ $i -lt 10 ]]

do

  echo "Number: $i"

  ((i++))

  if [[ $i -eq 5 ]]; then

    break

  fi

done

Pokračovat v prohlášení

Uděláme to samé, co jsme udělali v předchozím příkladu s continue stejně jako u break příkaz v while smyčka ve skriptu Bash.

i=0

while [[ $i -lt 10 ]]; do

  ((i++))

  if [[ "$i" == '5' ]]; then

    continue

  fi

  echo "Number: $i"

done

Úvahy na závěr

Doufám, že jste se naučili novou nebo dvě věci. Nebo alespoň doufám, že jste si mohli zopakovat to, co už víte. Moje dnešní poslední slova pro vás by byla pokračovat ve čtení a cvičení.

Děkuji.


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

  2. Skriptování v Linuxu:3 postupy pro smyčky while v Bash

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

  1. Bash HereDoc výukový program s příklady

  2. Linux which and whoami Command Tutorial pro začátečníky (s příklady)

  3. '&&' vs. '&' s příkazem 'test' v Bash

  1. Příkaz skupin Linux pro začátečníky (s příklady)

  2. Linux tr Command Tutorial pro začátečníky (s příklady)

  3. Linux readlink and realpath Command Tutorial pro začátečníky (s příklady)