Nagu enamik programmeerimiskeeli, peavad bash-skriptid mõnikord tegelema seotud väärtuste loendiga. Lihtsaim vorm on standardmassiiv.
Bashis on massiivi programmeerimine üsna erinev, eriti kui tegemist on süntaksiga. Bashi massiivid on samuti rangelt ühemõõtmelised, kuid neil on siiski palju kasutusvõimalusi.
Bash-massiivide põhisüntaks
Massiivi loomine bashis on lihtne. Saate initsialiseerida terve massiivi kasutades sulgusid, näiteks:
linn=(London Paris Milan "New York")
(Kogu selle linna näite koodi leiate siit see GitHubi sisu.)
See loob neljast elemendist koosneva massiivi, mis on indekseeritud vahemikus 0 kuni 3. Pange tähele, et neljas väärtus on kahest sõnast koosnev tsiteeritud string. Peate tsiteerima tühikuid sisaldavaid väärtusi, et selgitada, et need ei ole eraldi väärtused.
Ühele elemendile pääsete juurde, kasutades programmeerimiskeeltes levinud sulgude süntaksit.
linn[2]
Kuna see on bash, on väärtuse avaldises kasutamiseks vaja paar täpsustust:
- Peate lisama dollarimärgi ($) muutuja nimele.
- Peate kasutama ka breketeid ({}), et muuta muutuja nimi üheselt mõistetavaks. Vaikimisi töötleb bash $city[2] muutujana nimega linn. Lisage sulgud, et käskida bashil hinnata ka sulgusid ja indeksi numbrit.
Standardne bash massiivi juurdepääsu süntaks on siis:
${muutuja_nimi[indeks]}
Siin on täielik näide:
#!/bin/bash
linn=(London Paris Milan "New York")
echo ${city[3]}
# New York
Selle asemel, et massiivi korraga lähtestada, saate selle määrata samm-sammult. See skript on eelmise näite pikem ekvivalent:
#!/bin/bash
city[0]=London
linn[1]=Pariis
linn[2]=Milano
linn[3]="New York"
echo ${city[3]}
# New York
Pange tähele, et mõlemal juhul peate olema ettevaatlik, et mitte lisada võrdusmärgi ümber tühikut. "linn[0] = London", kui võrdusmärgi ümber on tühikud, tekitab vea.
Rohkem Bashi massiivi kasutusvõimalusi
Massiivid sobivad suurepäraselt seotud andmete salvestamiseks. Siin on (väga piiratud) kestaskript, et saada arvu ruutjuur:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9] = 3
sqrt[16] = 4
sqrt[25] = 5
echo ${sqrt[$1]}
Pange tähele, et skript kasutab väärtust $1 massiiviindeksina. $1 tähistab esimest käsurea argumenti, mille skript vastu võtab, nii et saate seda skripti käivitada järgmiselt:
$ ./sqrt.sh 9
3
Võite olla teadlik $ (cmd) süntaks käsu täitmiseks ja selle väljundi salvestamiseks muutujasse. Saate selle kombineerida massiivi initsialiseerimise süntaksiga, et saada failide massiiv, millega töötada:
arr=( $(ls) )
Massiiv on sageli täiuslik andmestruktuur itereerimiseks ja Bash pole erand. Iga elemendi printimiseks või toimingu sooritamiseks iga liikmega võite liikuda läbi massiivi.
Saate adresseerida massiivi sisse a jaoks.. sisse silmus, et korrata selle sisu. Näiteks siin on lihtne tsükkel, mis prindib ridade arvu igas massiivi failis arr:
faili jaoks asukohas "${arr[@]}"; teha
wc -l "$ fail"
tehtud
# 3 envvars
# 547 httpd.conf
# ...
Pange tähele, et see muster kasutab ära @ sümbol, et tuua massiivist kõik elemendid.
Veel Bash Array süntaksit
Saate hankida massiivi üksuste arvu, kasutades järgmist.
kaja ${#city[@]}
# 4
Standardmassiivi lõppu saate lisada uue elemendi järgmiselt:
arr+=(4)
Nii et loendisse viienda linna lisamiseks:
linn+=(Rooma)
echo ${city[@]}
# London Pariis Milano New York Rooma
Massiivi osa eraldamiseks võite kasutada süntaksit, mis on ligikaudne paljude teiste keelte lõiguoperatsioonile.
${arr[@]:s: n}
See süntaks tagastab massiivi lõigu, mis algab positsioonist s ja sisaldavad n esemed. Võite vahele jätta :n osa kõigi üksuste eraldamiseks s nimekirja lõpuni.
echo ${city[@]:2:2}
# Milano New York
kaja ${city[@]:3}
# New York Rooma
Bashil on palju funktsioone, need nõuavad lihtsalt õppimist
Bashi massiividel võivad olla piirangud, kuid need pakuvad samu põhifunktsioone nagu enamik programmeerimiskeeli. Kuigi bash on ajalooliselt toetanud lihtsalt lihtsaid ühemõõtmelisi massiive, on ajad muutumas. Bashi uusim versioon 4 toetab assotsiatiivseid massiive ja negatiivse massiivi indekseerimist.
Olenemata sellest, millist bashi versiooni te kasutate, on oluline mõista selle nüansse. Isegi tavalisel muutuja süntaksil on palju eripärasid.
Bashi muutujate selgitamine: lihtne juhend näidetega
Loe edasi
Seotud teemad
- Programmeerimine
- Linux
- Programmeerimine
- Linux Bash Shell
- Skriptimine
Autori kohta
Bobby on tehnoloogiaentusiast, kes töötas tarkvaraarendajana enamuse kaks aastakümmet. MUO-s on ta programmeerimise sektsiooni nooremtoimetaja. Ta on kirglik mängude vastu, töötab ajakirja Switch Player peatoimetajana ning on sukeldunud kõigisse veebiavaldamise ja veebiarenduse aspektidesse.
Liituge meie uudiskirjaga
Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!
Tellimiseks klõpsake siin