Bash Scripting – Array

Bash Scripting – Array

Nizi so pomembni pojmi v programiranju ali skriptiranju. Nizi nam omogočajo shranjevanje in pridobivanje elementov v obliki seznama, ki se lahko uporablja za določena opravila. V bashu imamo tudi polja, ki nam pomagajo pri ustvarjanju skriptov v ukazni vrstici za shranjevanje podatkov v obliki seznama. V tem članku bomo razumeli osnove nizov v skriptih bash.

Ustvarjanje nizov

Za ustvarjanje osnovne matrike v skriptu bash lahko uporabimo declare -a ukaz, ki mu sledi ime spremenljivke polja, ki ga želite podati.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) 

ALI

#!/bin/usr/env bash sport[0]=football sport[1]=cricket sport[2]=hockey sport[3]=basketball 

Vrednost elementov je lahko poljubno celo število ali niz ali katera koli druga oblika podatkov po želji. Vidimo lahko, da je matrika deklarirana v skriptu bash na dva načina, prvi se zdi bolj priročen in manj naporen za deklariranje. Če želimo matriko deklarirati naenkrat, je prva optimalna izbira, če pa želimo elemente dodajati po koščkih, je slednja dobra izbira.

Tiskanje nizov

Če želimo po deklaraciji matrike prikazati vse elemente v matriki, lahko uporabimo simbol @.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' 

echo '${array_name[@]}' 

[@] uporabljamo kot indeks matrike za prikaz vseh elementov. Vsi elementi so natisnjeni s presledki, narekovaji okoli spremenljivke se razširijo in natisnejo vse elemente v matriki.

Ponavljanje po matriki

Za ponavljanje matrike en element naenkrat lahko uporabimo zanke in izvajamo poljubne operacije v njenem telesu.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) for i in ${nums[@]} do echo -e '$i 
' done 

Kot lahko vidimo, smo uporabili zanko for za tiskanje elementov iz matrike enega za drugim. V prejšnjem razdelku smo uporabili trik pridobivanja vseh elementov matrike in iteracije enega za drugim v zanki for. ${array_name[@]} se razširi na vse elemente v matriki in zanka for jih enega za drugim ponovi z iteratorjem v primeru, ki je spremenljivka i , znotraj telesa zanke for natisnemo spremenljivka/iterator i in tako ponovite po matriki.

Pridobite število elementov v matriki

Za pridobivanje števila matrike elementov lahko uporabimo operator # pred imenom matrike v s v ${array_name[@]}.

 #!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}' 

Tako z ukazom vrnemo velikost matrike ${#sport[@]}, # se uporablja za pridobitev velikosti spremenljivke poleg njega, z uporabo dvojnih narekovajev se vrednost ukaza ovrednoti in po želji dobimo število elementov v matriki.

Vstavljanje elementa v Array

Če želite vstaviti element, je povsem enostavno, nastaviti moramo ustrezen indeks elementa, ki mu sledi vrednost elementa, ki ste ga želeli dati.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport[4]='dodgeball' sport[2]='golf' echo '${sport[@]}' 

V matriko smo dodali 5. element (4. indeks) in prav tako spremenili/uredili 3. element matrike (2. indeks). The ime matrike[indeks]=vrednost so vsi triki za dodajanje, spreminjanje ali inicializacijo elementov matrike.

Elemente lahko v matriko dodamo tudi z uporabo operatorja +=.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport+=('golf' 'baseball') echo '${sport[@]}' echo 'Size : ${#sport[@]}' 

Kot je razvidno iz primera, lahko matriki dodamo več elementov z minimalno kodo. Za dodajanje elementov v matriko uporabljamo array_name+=(elements).

Brisanje elementa iz matrike

Za izbris elementa iz matrike lahko uporabimo ukaz unset. Ukaz vzame ime spremenljivke v našem primeru ime matrike in indeks tega elementa. Indeks je lahko tudi relativen, tj. -1 označuje zadnji element in -2 predzadnji in tako naprej.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[1] echo '${sport[@]}' echo '${#sport[@]}' 

Kot lahko vidimo, bo unset arrayname[index] izbrisal element na indeksu iz matrike. Poleg tega je bila velikost matrike zmanjšana na 3 s 4, kar pomeni, da je element v celoti odstranjen in ne le nadomeščen s presledkom.

Uporaba relativnih indeksov

Če uporabljamo indekse, kot sta -1, -2 in tako naprej, se elementi sklicujejo na zadnji element, zato jih lahko izbrišemo ali spremenimo z relativnim vrstnim redom tudi od zadaj.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}' 

Kot lahko vidimo, se na indeks 1 sklicuje tudi kot -3 od zadaj, zato postane razmeroma lažje sklicevanje na določene elemente v velikem nizu.

Spojite niz

Lahko spojimo (izvlečemo napoj) matriko, da jo vzamemo za dodelitev ali jo natisnemo v drugo spremenljivko/matriko.

#!/bin/usr/env bash declare -a sport sport+=('football' 'cricket' 'hockey' 'basketball') sport+=('golf' 'baseball') echo 'sport = ${sport[@]}' arr='${sport[@]:1:3}' echo 'arr = ${arr[@]}' 

Iz matrike sport smo vzeli kos, tj. element med vključno indeksoma 1 in 3, in ga dodelili spremenljivki arr, ki je prav tako matrika. Operator @ pridobi vse elemente iz matrike, nato pa lahko matriko razdelimo med indeksa 1 in 3, tako da imamo elemente pri 1, 2 in 3 (kriket, hokej in baseball) iz športne matrike.

Definirajte statično matriko in natisnite elemente matrike

#To declare static Array programmingArray=(Java Python Ruby Perl) #In below 2 ways we can print the elements of the static array echo 'Way 1 of printing static values by using [@]:0 - ' ${programmingarray[@]$ echo 'Way 2 of printing static values by using [*]:0 - ' ${programmingarray[*]$ 

Na dva načina lahko natisnemo elemente statične matrike

Izvedba programa

sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here 

Posredovanje argumentov ukazne vrstice v datoteki skripta

#All the array elements are stored in an array called programmingArray programmingArray=('$@') #Index values start from 0 #If we do not specify the index, it will take up the size of first index value echo 'Size of programmingArray at 0th location..:' $(#programmingArray[0]} echo 'Size of programmingArray at 1st location..:' $(#programmingArray[1]} 

Zgornji skript je mogoče izvesti kot

# Tu so Java, Python in Ruby argumenti ukazne vrstice

sh arrayCheck.sh Java Python Ruby 

Koraki za izvedbo skripta:

programmingArray=(Java Python Ruby)

#Java bo prisotna na 0. indeksu, njeno velikost je mogoče izračunati na spodnji način

${#programmingArray[0]}

Podobno bo Python prisoten v 1. indeksu, njegovo velikost je mogoče izračunati na spodnji način

${#programmingArray[1]}

Izhod:

Ponavljanje vrednosti polja z uporabo zanke for

$@ bo podal vse vrednosti, ki so bile posredovane prek argumentov ukazne vrstice in so shranjene v matriki.

Lahko se ponavlja z uporabo zanke for

declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done 

Izhod:

Oglejmo si na hitro, kaj vsak simbol predstavlja

Sintaksa

Izhod
arr=()

arr[0]=3 Prepiši 1. element

arr+=(4) Pripni vrednost(e)

str=$(ls) Shrani izhod ls kot niz

arr=( $(ls) ) Shrani izhod ls kot niz datotek

${arr[@]:s:n} Pridobi n elementov, ki se začnejo pri indeksu

#Lahko zagotovimo nabor vrednosti

Všečkaj to

arr=(ena dva tri)

Za inicializacijo matrike
${arr[0]} Za pridobitev prvega elementa. Indeks se vedno začne z 0
${arr[@]} Da pridobimo vse elemente in nato lahko ponavljamo v zanki
${!arr[@]} Samo za pridobivanje matričnih indeksov
${#arr[@]} Za izračun velikosti niza
arr[2]=3 Če želite prepisati 3. element, ga moramo uporabiti na ta način. Ker se indeks začne pri 0, je arr[2] pravilen.
arr+=(40) Za dodajanje vrednosti lahko uporabimo + in nato dodelimo z =, zato se uporabi +=.
str=$(ls) Če želite shraniti izhod ukaza ls kot niz (primer 4 je prikazan za ta izhod)
arr=( $(ls) ) Če želite shraniti izhod ls kot polje datotek (primer 5 je prikazan za ta izhod)
${arr[@]:s:n} Za pridobitev n elementov, ki se začnejo pri indeksu s