logo

Bash Scripting – Array

Matriser er viktige begreper innen programmering eller skripting. Matriser lar oss lagre og hente elementer i en listeform som kan brukes til visse oppgaver. I bash har vi også arrays som hjelper oss med å lage skript på kommandolinjen for å lagre data i et listeformat. I denne artikkelen vil vi forstå det grunnleggende om arrays i bash-skripting.

Opprette matriser

For å lage en grunnleggende array i et bash-skript, kan vi bruke declare -en kommando etterfulgt av navnet på matrisevariabelen du vil gi.

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

ELLER



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

Verdien av elementene kan være et hvilket som helst heltall eller strenger eller hvilken som helst annen form for data etter ønske. Vi kan se at arrayet er deklarert i et bash-skript på to måter, førstnevnte virker mer praktisk og mindre hektisk å erklære. Hvis vi ønsker å deklarere matrisen på én gang, er førstnevnte det optimale valget, men hvis elementene skal legges til i biter og stykker, er sistnevnte et godt valg.

Skrive ut matrisene

Etter å ha erklært matrisen, hvis vi ønsket å vise alle elementene i matrisen, kan vi bruke @-symbolet.

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

echo '${array_name[@]}'>

Vi bruker [@] som en indeks til matrisen for å vise alle elementene. Alle elementene er trykt med mellomromsseparerte, Anførselstegnene rundt variabelen utvides og skriver ut alle elementene i matrisen.

Itererer over matrisen

For å iterere over en matrise ett element om gangen, kan vi bruke løkker og utføre alle operasjoner i hoveddelen av det.

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

Som vi kan se har vi brukt en for-løkke for å skrive ut elementet fra matrisen en etter en. Vi har brukt trikset i forrige seksjon med å få alle elementene i arrayet og iterere over det én etter én i for en loop. ${array_name[@]} utvides til alle elementene i matrisen og for-løkken itererer over dem én etter én med iteratoren i eksemplet. variabel i , inne i kroppen av for-løkken skriver vi ut variabel/iterator i og dermed iterere over matrisen.

Få antall elementer i matrisen

For å hente nummeret på elementene array kan vi bruke #-operatoren foran array-navnet i s-ene i ${array_name[@]}.

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

Vi returnerer dermed størrelsen på matrisen ved å bruke kommandoen ${#sport[@]}, # brukes for å få størrelsen på variabelen ved siden av, ved å bruke doble anførselstegn evalueres verdien av kommandoen og vi får antall elementer i matrisen som ønsket.

Sette inn et element i Array

Å sette inn et element er ganske enkelt, vi må angi elementets passende indeks etterfulgt av verdien til elementet du likte å gi.

#!/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[@]}'>

Vi har lagt til det 5. elementet (4. indeks) i arrayet og også modifisert/redigert arrayets 3. element (2. indeks). De matrisenavn[indeks]=verdi er alle triksene for å legge til, modifisere eller initialisere elementene i matrisen.

Vi kan også legge til elementer i en matrise ved å bruke +=-operatoren.

#!/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[@]}'>

Som vist i eksempelet, kan vi legge til flere elementer til matrisen med minimal kode. Vi bruker array_name+=(elements) for å legge til elementer til arrayen.

Sletter et element fra Array

For å slette et element fra matrisen kan vi bruke kommandoen unset. Kommandoen tar inn navnet på variabelen i vårt tilfelle matrisenavnet og indeksen til det elementet. Indeksen kan også være relativ, dvs. -1 som indikerer det siste elementet og -2 til nest sist og så videre.

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

Som vi kan se vil unset arrayname[index] slette elementet ved index fra arrayet. Størrelsen på matrisen er også redusert til 3 fra 4, noe som indikerer at elementet er fullstendig fjernet og ikke bare erstattet med mellomrom.

Bruker relative indekser

Hvis vi bruker indekser som -1,-2, og så videre, refereres elementene fra det siste elementet, og derfor kan vi slette eller endre dem med relativ rekkefølge bakfra også.

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

Som vi kan se er indeks 1 også referert til som -3 fra baksiden, og derfor blir det relativt lettere å referere til enkelte elementer i en stor matrise.

Spleis en Array

Vi kan spleise (ta ut en potion) en matrise for å ta tilordne eller skrive den ut til en annen variabel/array.

#!/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[@]}'>

Vi har tatt ut en del fra sportsarrayet, dvs. elementet mellom indeks 1 og 3 inklusive, og tilordnet det til arr-variabelen som også er en matrise. @-operatoren henter alle elementene fra matrisen og så kan vi spleise matrisen mellom indeksene 1 og 3 slik at vi har elementene på 1,2 og 3 (cricket, hockey og baseball) fra sportsarrayen.

Definer en statisk matrise og skriv ut elementene i matrisen

#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[*]$>

På 2 måter kan vi skrive ut elementer av statisk array

Programutførelse

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

Sende kommandolinjeargumentene i en skriptfil

#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]}>

Skriptet ovenfor kan kjøres som

# Her er Java, Python og Ruby kommandolinjeargumenter

ordbok c#
sh arrayCheck.sh Java Python Ruby>

Skriptkjøringstrinn:

programmeringArray=(Java Python Ruby)

#Java vil være til stede på den 0. indeksen, størrelsen kan beregnes på følgende måte

${#programmingArray[0]}

På samme måte vil Python være til stede ved den første indeksen, størrelsen kan beregnes på følgende måte

${#programmingArray[1]}

Produksjon:

Itererer matriseverdiene ved å bruke for loop

$@ vil gi alle verdiene som ble sendt via kommandolinjeargumenter, og den er lagret i en matrise.

Det kan gjentas ved å bruke for-løkken

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

Produksjon:

La oss ta en rask titt på hva hvert eneste symbol representerer

Syntaks

Produksjon
arr=()

arr[0]=3 Overskriv 1. element

arr+=(4) Legg til verdi(er)

str=$(ls) Lagre ls-utdata som en streng

arr=( $(ls) ) Lagre ls-utdata som en rekke filer

${arr[@]:s:n} Hent n elementer fra indeksen

#Vi kan tilby sett med verdier

som dette

arr=(en to tre)

For å initialisere en matrise
${arr[0]} For å hente det første elementet. Indeks starter alltid med 0
${arr[@]} For å hente alle elementer og deretter kan vi iterere i en loop
${!arr[@]} For å hente array-indekser alene
${#arr[@]} For å beregne størrelsen på en matrise
arr[2]=3 For å overskrive 3. element må vi bruke det på denne måten. Siden indeksen starter på 0, er arr[2] riktig.
arr+=(40) For å legge til verdi(er), kan vi bruke + og deretter tilordne med = og dermed brukes +=.
str=$(ls) For å lagre ls-kommandoutdata som en streng (eksempel 4 vises for denne utgangen)
arr=( $(ls) ) For å lagre ls-utdata som en rekke filer (eksempel 5 vises for denne utgangen)
${arr[@]:s:n} For å hente n elementer som starter på indeks s