Zanka Bash 'For': Vadnica in primeri

Bash (Bourne Again Shell) je ukazni poziv in skriptni jezik lupine v operacijskih sistemih GNU/Linux. To je privzeta lupina za večino distribucij Linuxa.

Kot večina skriptnih jezikov, Bash ponuja sintakse zanke za večkratno ponovitev podobnih nalog. V tem članku se bomo naučili, kako uporabljati za zanka v Bashu.

Uvod

Tipičen Bash skript vsebuje vrsto ukazov, ki se izvajajo enega za drugim. Spremenljivke se lahko uporabljajo za shranjevanje nizov, vrednosti celoštevilskih indeksov, rezultatov ukaza itd. Zanke so potrebne, če želi uporabnik večkrat izvesti določen ukaz. Posebej uporaben je, če je izhod enega ukaza v obliki seznama, pri vsakem rezultatu na seznamu pa je treba zagnati drugi ukaz.

Splošna sintaksa

Splošna sintaksa za za zanka v Bashu je:

za v do ... ... opravljeno

Tukaj, je spremenljivka Bash, ki mora biti veljavno ime spremenljivke lupine Linuxa, tj. ime vsebuje kombinacijo črk (az, AZ), številk (0-9) in podčrtaja ( _ ) in se mora začeti s črko ali podčrtaj.

The je bodisi obseg celih indeksov po meri, ki bodo zankani, bodisi seznam celih števil ali nizov po meri. Lahko vsebuje tudi drug ukaz Linux, vendar mora biti izhod takega ukaza ločen s presledki ali znaki nove vrstice, tj. razčleniti ga Bash na seznam (seznam v Bashu je v bistvu zbirka vrednosti, ločenih s presledkom ali novo vrstico ).

Katerikoli ukaz(-i), ki naj bi se izvedel, mora biti nameščen znotraj narediti..opravljeno blok.

Poglejmo si nekaj preprostih primerov.

Zanka na obsegu vrednosti Integer: Naslednja koda ustvari imenike z imenom dir1, dir2, dir3 do dir10.

za i v {1..10} naredite mkdir dir$i done

Zanka na seznamu fiksnih vrednosti: Naslednja koda natisne vsak niz ali celo število na danem fiksnem seznamu.

for i in Hello 1 2 3 Adijo! do echo $i done

Zanka ob izhodu ukaza: Naslednja koda se zanke čez izhod ls in natisne ime vsake datoteke v dani obliki.

for i v `ls` do echo "Ime datoteke je $i" končano

Sintaksa, ki temelji na izrazu

Sintaksa, ki temelji na izrazu, podobna programskemu jeziku C, je možna tudi v Bashu:

za ((Izraz 1; Izraz 2; Izraz 3)) do ... ... končano

tukaj, Izraz 1 je inicializacija indeksnih spremenljivk. Izraz 2 je pogoj, ko je treba zanko zapustiti; ta pogoj se preverja pri vsaki ponovitvi. Izraz 3 določa prirast/pomanjšanje/spremembo vrednosti indeksne spremenljivke

Naslednji primer preprosto natisne vrednosti od 0 do 4:

for ((i=0;i<5;i++)) do echo $i done

Naslednji primer ustvari neskončno zanko, ker ni podan noben izraz:

za (( ; ; )) do echo "Pritisnite Ctrl-C za ustavitev" končano

Prekini in nadaljuj

Izjava o prekinitvi za pogojni izhod

Uporabimo lahko tudi pogojni stavek če znotraj zanke. The če stavek se lahko uporablja z a zlomiti stavek, za pogojni izhod iz zanke.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi opravljeno

Zgornja zanka bo izpisala številke od 0 do 4. Potem, ko je vrednost i 5, bo izstopila iz zanke. To je še posebej uporabno, ko je treba zanko zapustiti, ko ukaz daje določen izhod. Na primer, naslednja zanka se prekine, če in ko najde prazno datoteko.

za datoteko v `ls` do flen=`wc -c $file` če [[ "$flen" = "0 $file" ]] potem echo "$file je prazna" prekinitev drugače echo $flen fi končano 

Ukaz wc -c natisne število vrstic v datoteki . Natisne ga v formatu , na primer 10 test.txt. Izstopimo iz zanke, ko je število vrstic 0, torej prazna datoteka.

Izjavo Continue, da pogojno preskočite ponovitev

Podobno kot C in številni drugi programski jeziki ima bash tudi a nadaljevati stavek, da preskočite preostali del ponovitve v zanki, če je določen pogoj izpolnjen.

za ((i=0;i<10;i++)) stori if [[ $i -eq 5 ]] nato nadaljuj fi echo $i; Končano

Zgornja zanka bo izpisala številke od 0 do 10, razen 5, ker med ponovitvijo i=5 obstaja stavek za nadaljevanje, ki bo preskočil preostanek kode v zanki na začetku s ponovitvijo i=6.

V naslednjem primeru natisnemo število vrstic v datoteki in določena ponovitev bo nadaljevati če je imenik in ne datoteka.

za datoteko v `ls` stori if [[ -d $file ]] nato nadaljuj fi wc -c "$file" končano

[[ -d $file ]] preveri, ali je datoteka imenik. Če je, potem preskočimo na naslednjo datoteko, torej naslednjo ponovitev. Če ne gre za imenik, natisnemo število vrstic v datoteki z uporabo stranišče ukaz, kot je prikazano tudi prej.

Uporaba zank: skripti in ukazna vrstica

Sintakso zanke lahko uporabite v lupini Bash neposredno ali iz datoteke skripta lupine. Enkrat a za sintaksa zanke je vnesena v lupino, lupina nadaljuje s pozivom, da uporabniku omogoči nadaljevanje ukazov, ki jih je treba zastaviti.

Sicer pa lahko uporabnik to shrani v skriptno datoteko in izvede skriptno datoteko.

The #!/bin/bash na začetku določa tolmač, ki bo uporabljen, ko se datoteka izvaja. Čeprav je Bash danes najpogosteje uporabljena lupina, nekateri uporabniki raje uporabljajo lupine, kot so zsh, ki ga je treba podati namesto bash na začetku te datoteke.

Da bi dali dovoljenja za izvajanje za to datoteko zaženite:

chmod +x test.sh

končno, za izvedbo datoteke, zaženi:

./test.sh

Zaključek

The za zanka v Bashu je precej preprosta funkcija, vendar se uporablja v skoraj vseh vrstah zapletenih scenarijev. Učenje tega je zelo pomembno, ne glede na to, ali ste redni ali napredni uporabnik Linuxa ali se začnete učiti avtomatizacije za naloge sistemske administracije in DevOps.