Bash „For“ ciklas: pamoka ir pavyzdžiai

Bash (Bourne Again Shell) yra apvalkalo komandų eilutė ir scenarijų kalba GNU/Linux operacinėse sistemose. Tai yra numatytasis daugelio Linux platinimų apvalkalas.

Kaip ir dauguma skriptų kalbų, „Bash“ pateikia ciklo sintakses, kad panašias užduotis kartotų kelis kartus. Šiame straipsnyje mes sužinosime, kaip naudoti dėl kilpa Bash.

Įvadas

Tipiškame „Bash“ scenarijuje yra keletas komandų, kurios turi būti vykdomos viena po kitos. Kintamieji gali būti naudojami saugoti eilutes, sveikųjų skaičių indekso reikšmes, komandos rezultatus ir kt. Kilpos reikalingos, kai vartotojas nori vykdyti tam tikrą komandą kelis kartus. Tai ypač naudinga, kai vienos komandos išvestis yra sąrašo forma, o kiekviename sąraše esančiame rezultate turi būti vykdoma antra komanda.

Bendroji sintaksė

Bendroji sintaksė, skirta dėl kilpa Bash yra:

už in do ... ... padaryta

Čia, yra „Bash“ kintamasis, kuris turi būti galiojantis „Linux“ apvalkalo kintamojo pavadinimas, ty pavadinime yra raidžių (az, AZ), skaičių (0–9) ir pabraukimo ( _ ) derinys ir jis turi prasidėti raide arba apatinis brūkšnys.

The yra tinkintas sveikųjų skaičių indeksų diapazonas, kuris bus sujungiamas, arba tinkintas sveikųjų skaičių arba eilučių sąrašas. Jame taip pat gali būti kita Linux komanda, tačiau tokios komandos išvestis turi būti atskirta tarpais arba naujos eilutės simboliais, ty Bash gali išanalizuoti sąrašą (sąrašas Bash iš esmės yra reikšmių rinkinys, atskirtas tarpu arba nauja eilute ).

Kad ir kuri komanda (-os) turi būti vykdoma, turi būti įdėta (-os) viduje padaryti..atlikta blokas.

Pažiūrėkime kelis paprastus pavyzdžius.

Skaičiuojama sveikųjų skaičių reikšmių diapazone: Šis kodas sukuria katalogus pavadinimu dir1, dir2, dir3 iki dir10.

for i in {1..10} do mkdir dir$i done

Žvilgsnis į fiksuotų verčių sąrašą: Šis kodas spausdina kiekvieną eilutę arba sveikąjį skaičių nurodytame fiksuotame sąraše.

man sveiki 1 2 3 Iki! do echo $i done

Perėjimas prie komandos išvesties: Šis kodas perjungia išvestį ls ir išspausdina kiekvieno failo pavadinimą nurodytu formatu.

i `ls` do echo "Failo pavadinimas yra $i" padaryta

Išraiška pagrįsta sintaksė

Išraiška pagrįsta sintaksė, panaši į C programavimo kalbą, taip pat galima Bash:

for ((1 išraiška; 2 išraiška; 3 išraiška)) do ... ... atlikta

Čia 1 išraiška yra indekso kintamojo (-ų) inicijavimas. 2 išraiška yra sąlyga, kai reikia išjungti kilpą; ši sąlyga tikrinama kiekvienoje iteracijoje. 3 išraiška nurodo indekso kintamojo (-ų) vertės padidėjimą/sumažinimą/keitimą

Šis pavyzdys tiesiog atspausdina reikšmes nuo 0 iki 4:

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

Šis pavyzdys sukuria begalinę kilpą, nes nenurodomos jokios išraiškos:

už (( ; ; )) do echo "Paspauskite Ctrl-C, kad sustabdytumėte".

Pertrauk ir tęsk

Pertraukos pareiškimas dėl sąlyginio išėjimo

Taip pat galime naudoti sąlyginį teiginį jeigu kilpos viduje. The jeigu teiginys gali būti naudojamas su a pertrauka pareiškimas, skirtas sąlyginiam išėjimui iš ciklo.

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

Aukščiau pateikta kilpa atspausdins skaičius nuo 0 iki 4. Tada, kai i reikšmė bus 5, ji ištrūks iš ciklo. Tai ypač naudinga, kai iš ciklo reikia išeiti, kai komanda duoda tam tikrą išvestį. Pavyzdžiui, šis ciklas nutrūksta, jei ir kai randa tuščią failą.

failui `ls` do flen=`wc -c $failas` if [[ "$flen" = "0 $failas" ]] tada echo "$failas tuščias" pertrauka else echo $flen fi atlikta 

Komanda wc -c atspausdina failo eilučių skaičių . Jis atspausdina formatu , pavyzdžiui, 10 test.txt. Mes išeiname iš ciklo, kai eilučių skaičius yra 0, ty tuščias failas.

Tęskite teiginį, kad sąlygiškai praleistumėte iteraciją

Panašiai kaip C ir daugelyje kitų programavimo kalbų, bash taip pat turi a Tęsti teiginį, norėdami praleisti likusią ciklo iteracijos dalį, jei įvykdoma tam tikra sąlyga.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] tada tęsti fi echo $i; padaryta

Aukščiau pateikta kilpa atspausdins skaičius nuo 0 iki 10, išskyrus 5, nes iteracijos metu i=5 yra teiginys tęsti, kuris praleidžia visą likusį kodą ciklo pradžioje su iteracija i=6.

Šiame pavyzdyje atspausdiname failo eilučių skaičių ir tam tikrą iteraciją Tęsti jei tai katalogas, o ne failas.

ls failui daryti if [[ -d $failas ]], tada tęsti fi wc -c "$failas" padaryta

[[ -d $failas ]] patikrina, ar failas yra katalogas. Jei taip, mes pereiname prie kito failo, ty kitos iteracijos. Jei tai ne katalogas, failo eilučių skaičių spausdiname naudodami wc komanda, kaip parodyta anksčiau.

Ciklų naudojimas: scenarijai ir komandų eilutė

Ciklo sintaksė gali būti naudojama Bash apvalkale tiesiogiai arba iš apvalkalo scenarijaus failo. Kartą dėl ciklo sintaksė įvedama apvalkale, apvalkalas tęsia raginimą, kad vartotojas galėtų tęsti komandas, kurias reikia atlikti.

Arba vartotojas gali tai išsaugoti scenarijaus faile ir vykdyti scenarijaus failą.

The #!/bin/bash pradžioje nurodo interpretatorių, kuris bus naudojamas vykdant failą. Nors Bash yra dažniausiai naudojamas apvalkalas, kai kurie vartotojai teikia pirmenybę tokiems apvalkalams kaip zsh, kuris turėtų būti nurodytas vietoje bash šio failo pradžioje.

Suteikti vykdymo leidimus šiam failui paleiskite:

chmod +x test.sh

Pagaliau, failo vykdymui, paleisti:

./test.sh

Išvada

The dėl kilpa Bash yra gana paprasta funkcija, tačiau ji naudojama beveik visuose sudėtinguose scenarijų scenarijuose. To išmokti labai svarbu, nesvarbu, ar esate įprastas, ar pažengęs „Linux“ vartotojas, ar pradedate mokytis automatizuoti sistemos administravimo ir „DevOps“ užduotis.