GNU/Linux >> Znalost Linux >  >> Linux

Bash Beginner Series #8:Loops in Bash

Pozor na nekonečné smyčky!

Schopnost smyčky je velmi výkonná funkce bash skriptování. Smyčky mají různé případy použití.

V tomto tutoriálu prozkoumáte tři různé struktury bashových smyček. Dozvíte se také, jak používat smyčky k procházení prvků pole.

Dále se naučíte, jak používat příkazy break a continue k ovládání smyček, a nakonec se naučíte, jak vytvářet nekonečné smyčky.

Pro smyčky v Bash

Smyčky For jsou jedním ze tří různých typů struktur smyček, které můžete použít v bash. Existují dva různé styly pro psaní cyklu for.

  • Smyčky ve stylu C
  • Použití smyčky for na seznamu/rozsahu položek

C-styl pro smyčky v bash

Pokud jste obeznámeni s programovacím jazykem podobným C nebo C++, pak poznáte následující syntaxi cyklu for:

for ((initialize ; condition ; increment)); do
[COMMANDS]
done

Pomocí výše uvedené syntaxe ve stylu C vytiskne následující smyčka for desetkrát „Hello Friend“:

for ((i = 0 ; i < 10 ; i++)); do
	echo "Hello Friend"
done

Smyčka for nejprve inicializovala celočíselnou proměnnou i na nulu pak testuje podmínku (i <10); je-li pravda, pak smyčka provede řádek echo „Hello Friend“ a zvýší proměnnoui od 1 a poté smyčka běží znovu a znovu, dokud i již není menší než 10 .

[email protected]:~$ bash hello.sh 
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend
Hello Friend

Seznam/rozsah pro smyčky v Bash

Existuje také další varianta syntaxe smyčky for, která je zvláště užitečná, pokud pracujete se seznamem souborů (nebo řetězců), rozsahem čísel, poli, výstupem příkazu atd. Syntaxe seznamu/rozsahu pro smyčku má následující podobu :

for item in [LIST]; do
[COMMANDS]
done

Například následující smyčka for dělá přesně to samé jako smyčka for ve stylu C, kterou jste vytvořili v předchozí části:

for i in {1..10}; do
	echo "Hello Friend"
done

Soubor var.sh skript níže vypíše všechny soubory a adresář, který existuje pod /var adresář:

#!/bin/bash

for i in /var/*; do
	echo $i 
done

Níže je ukázkový výstup při spuštění skriptu var.sh:

[email protected]:~$ ./var.sh
/var/backups
/var/cache
/var/crash
/var/lib
/var/local
/var/lock
/var/log
/var/mail
/var/metrics
/var/opt
/var/run
/var/snap
/var/spool
/var/tmp

While Loops in Bash

Smyčka while je další populární a intuitivní smyčka, kterou můžete použít v bash skriptech. Obecná syntaxe smyčky while je následující:

while [ condition ]; do
[COMMANDS]
done

Například následující 3x10.sh skript používá smyčku while, která vypíše prvních deset násobků čísla tři:

#!/bin/bash

num=1
while [ $num -le 10 ]; do
	echo $(($num * 3))
	num=$(($num+1))
done

Zde je výstup výše uvedeného skriptu:

[email protected]:~$ ./3x10.sh
3
6
9
12
15
18
21
24
27
30

Nejprve inicializovalčíslo proměnná na 1; pak smyčka while poběží tak dlouho jako num je menší nebo roven 10 . V těle cyklu while příkaz echo vypíše num vynásobeno tři a poté se zvýší num od 1 .

Until Loops in Bash

Pokud přicházíte z prostředí C/C++, možná hledáte smyčku do-while, ale ta v bash neexistuje.

V bash existuje další druh smyčky. Cyklus till má stejnou syntaxi jako cyklus while:

until [ condition ]; do
[COMMANDS]
Done

Klíčový rozdíl mezi smyčkou till a smyčkou while je v testovacím stavu. Smyčka while poběží tak dlouho, dokud je testovací podmínka pravdivá; na druhé straně bude smyčka do dokud nebude testovací podmínka nepravdivá!

Můžete například snadno vytvořit 3x10.sh skript se smyčkou dokud namísto smyčky while; trik je zde negovat podmínku testu:

#!/bin/bash

num=1
until [ $num -gt 10 ]; do
	echo $(($num * 3))
	num=$(($num+1))
done

Všimněte si, že negace testovací podmínky [ $num -le 10 ]; je [ $num -gt 10 ];

Další informace o opakování ve skriptech bash

Nyní, když jste obeznámeni se smyčkami v bash skriptech

Pokud sledujete tuto sérii tutoriálů od začátku, měli byste být obeznámeni s poli v bash.

Cykly for jsou často nejoblíbenější volbou, pokud jde o iteraci prvků pole.

Například následující prime.sh skript iteruje a vytiskne každý prvek v primárním poli:

#!/bin/bash

prime=(2 3 5 7 11 13 17 19 23 29)
for i in "${prime[@]}"; do
	echo $i
done 

Toto je výstup skriptu prime.sh:

[email protected]:~$ ./prime.sh
2
3
5
7
11
13
17
19
23
29

Použití Break and Continue in bash loops

Někdy můžete chtít smyčku předčasně ukončit nebo přeskočit iteraci smyčky. K tomu můžete použít příkazy break a continue.

Příkaz break ukončí provádění smyčky a přepne řízení programu na další příkaz nebo instrukci následující za smyčkou.

Například následující smyčka vytiskne pouze čísla od jedné do tří:

for ((i=1;i<=10;i++)); do
	echo $i
	if [ $i -eq 3 ]; then
		break
	fi
done

Můžete také použít pokračovat příkaz přeskočit iteraci smyčky. Cyklus pokračuje a přesune se k další iteraci, ale příkazy po příkazu continue jsou v této konkrétní iteraci přeskočeny.

Například následující odd.sh skript vypíše pouze lichá čísla od jedné do deseti, protože přeskakuje všechna sudá čísla:

#!/bin/bash
for ((i=0;i<=10;i++)); do
	if [ $(($i % 2)) -ne 1 ]; then
		continue
	fi
	echo $i
done

Zde je výstup, který tiskne lichá čísla:

[email protected]:~$ ./odd.sh
1
3
5
7
9

Nekonečné smyčky v bash

Nekonečná smyčka je smyčka, která běží věčně; k tomu dojde, když je podmínka testu smyčky vždy pravdivá.

Ve většině případů jsou nekonečné smyčky produktem lidské logické chyby.

Například někdo, kdo může chtít vytvořit smyčku, která tiskne čísla 1 až 10 v sestupném pořadí, může skončit vytvořením následující nekonečné smyčky omylem:

for ((i=10;i>0;i++)); do
	echo $i
done 

Problém je v tom, že smyčka neustále inkrementuje proměnnoui od 1 . Chcete-li to opravit, musíte změnit i++ s i-- takto:

for ((i=10;i>0;i--)); do
	echo $i
done 

V některých případech můžete chtít záměrně vytvořit nekonečné smyčky, abyste čekali na splnění externí podmínky v systému. Nekonečnou smyčku for můžete snadno vytvořit následovně:

for ((;;)); do
	[COMMANDS]
done 

Pokud chcete místo toho vytvořit nekonečnou smyčku while, můžete ji vytvořit následovně:

while [ true ]; do
	[COMMANDS]
done

Úžasný! Tím se dostáváme na konec tohoto tutoriálu v Bash Beginner Series. Doufám, že jste si užili opakování v bash!

Nyní procvičte smyčku pomocí několika jednoduchých cvičení. Řešení také získáte v níže uvedeném PDF.

Bash Kapitola 8 Cvičné otázkyProblémy a jejich řešení k procvičení toho, co jste se právě naučili v této kapitole Bash-Kapitola-8-Procvičení-otázek-Linux-Příručka.pdf28 KB

Podívejte se na další kapitolu, kde se dozvíte, jak znovu použít kód ve vašich bash skriptech vytvářením funkcí.


Linux
  1. Jak napsat smyčku v Bash

  2. RHCE Ansible série #5:Ansible smyčky

  3. Bash for smyčky Příklady

  1. Bash pokračovat:Jak obnovit smyčku

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

  3. Bash Beginner Series #9:Použití funkcí v Bash

  1. Bash, zatímco Loop

  2. Bash For Loop

  3. Bash dokud smyčka