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.