Bash Scripting – Array

Bash Scripting – Array

Arrays er vigtige begreber inden for programmering eller scripting. Arrays giver os mulighed for at gemme og hente elementer i en listeform, som kan bruges til bestemte opgaver. I bash har vi også arrays, der hjælper os med at skabe scripts på kommandolinjen til lagring af data i et listeformat. I denne artikel vil vi forstå det grundlæggende i arrays i bash-scripting.

Oprettelse af arrays

For at oprette et grundlæggende array i et bash-script, kan vi bruge deklarationen -en kommando efterfulgt af navnet på den array-variabel, du gerne vil give.

#!/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 

Værdien af ​​elementerne kan være ethvert heltal eller strenge eller enhver anden form for data efter ønske. Vi kan se, at arrayet er deklareret i et bash-script på to måder, hvor førstnævnte virker mere bekvemt og mindre hektisk at erklære. Hvis vi ønsker at erklære arrayet på én gang, er førstnævnte det optimale valg, men hvis elementerne skal tilføjes i bits og stykker, er sidstnævnte et godt valg.

Udskrivning af arrays

Efter at have erklæret arrayet, hvis vi ønskede at vise alle elementerne i arrayet, kan vi bruge @-symbolet.

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

echo '${array_name[@]}' 

Vi bruger [@] som et indeks til arrayet for at vise alle elementerne. Alle elementerne udskrives med mellemrumsadskilte. Anførselstegnene omkring variablen udvides og udskriver alle elementerne i arrayet.

Itererer over Arrayet

For at iterere over et array et element ad gangen, kan vi bruge loops og udføre alle operationer i kroppen af ​​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 brugt en for-løkke til at udskrive elementet fra arrayet én efter én. Vi har brugt tricket i det foregående afsnit med at få alle elementerne i arrayet og iterere over det én efter én i for en loop. ${array_name[@]} udvides til alle elementerne i arrayet, og for-løkken itererer over dem én efter én med iteratoren i eksemplet, det er variabel i , inde i kroppen af ​​for-løkken udskriver vi variabel/iterator i og dermed iterere over arrayet.

Få antallet af elementer i Arrayet

For at hente antallet af elementerne array kan vi bruge #-operatoren før array-navnet i s i ${array_name[@]}.

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

Vi returnerer således størrelsen af ​​arrayet ved at bruge kommandoen ${#sport[@]}, # bruges til at få størrelsen på variablen ved siden af, ved hjælp af dobbelte anførselstegn evalueres værdien af ​​kommandoen, og vi får antallet af elementer i arrayet som ønsket.

Indsættelse af et element i Array

At indsætte et element er ret ligetil, vi skal indstille elementets passende indeks efterfulgt af værdien af ​​det element, du kunne lide at give.

#!/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 tilføjet det 5. element (4. indeks) i arrayet og også ændret/redigeret arrayets 3. element (2. indeks). Det matrixnavn[indeks]=værdi er alle tricks til at tilføje, ændre eller initialisere elementerne i arrayet.

Vi kan også tilføje elementer til et array ved hjælp af += 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 det ses i eksemplet, kan vi tilføje flere elementer til arrayet med minimal kode. Vi bruger array_name+=(elements) til at tilføje elementer til arrayet.

Sletning af et element fra Array

For at slette et element fra arrayet kan vi bruge kommandoen unset. Kommandoen tager navnet på variablen i vores tilfælde array-navnet og indekset for det element. Indekset kan også være relativt, dvs. -1 angiver det sidste element og -2 til næstsidst 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[indeks] slette elementet ved index fra arrayet. Også størrelsen af ​​arrayet er blevet reduceret til 3 fra 4, hvilket indikerer, at elementet er helt fjernet og ikke kun erstattet med mellemrum.

Brug af relative indekser

Hvis vi bruger indekser som -1,-2, og så videre, refereres elementerne fra det sidste element, og vi kan derfor også slette eller ændre dem med relativ rækkefølge bagfra.

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

Som vi kan se, refereres indeks 1 også til -3 bagfra, og det bliver derfor relativt lettere at referere til visse elementer i et stort array.

Splejs et array

Vi kan splejse (tage en potion) en matrix for at tildele eller udskrive den til en anden 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 taget en del ud fra sportsarrayet, dvs. elementet mellem indeks 1 og 3 inklusive, og tildelt det til arr-variablen, som også er et array. @-operatoren henter alle elementer fra arrayet, og så kan vi splejse arrayet mellem indeks 1 og 3, så vi har elementerne på 1,2 og 3 (cricket, hockey og baseball) fra sportsarrayet.

Definer et statisk array og udskriv arrayets elementer

#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åder kan vi udskrive elementer af statisk array

Program udførelse

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

Sende kommandolinjeargumenterne i en scriptfil

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

Ovenstående script kan udføres som

# Her er Java, Python og Ruby kommandolinjeargumenter

sh arrayCheck.sh Java Python Ruby 

Skriptudførelsestrin:

programmeringArray=(Java Python Ruby)

#Java vil være til stede ved det 0. indeks, dets størrelse kan beregnes på nedenstående måde

${#programmingArray[0]}

På samme måde vil Python være til stede ved det 1. indeks, dets størrelse kan beregnes på nedenstående måde

${#programmingArray[1]}

Produktion:

Gentager matrixværdierne ved hjælp af for loop

$@ vil give alle de værdier, der blev sendt via kommandolinjeargumenter, og det er gemt i et array.

Det kan gentages ved at bruge for-løkken

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

Produktion:

Lad os tage et hurtigt kig på, hvad hvert enkelt symbol repræsenterer

Syntaks

Produktion
arr=()

arr[0]=3 Overskriv 1. element

arr+=(4) Tilføj værdi(er)

str=$(ls) Gem ls output som en streng

arr=( $(ls) ) Gem ls output som en række filer

${arr[@]:s:n} Hent n elementer startende ved indeks

#Vi kan levere et sæt værdier

sådan her

arr=(en to tre)

For at initialisere et array
${arr[0]} For at hente det første element. Indeks starter altid med 0
${arr[@]} For at hente alle elementer og derpå kan vi iterere i en loop
${!arr[@]} For at hente matrixindeks alene
${#arr[@]} For at beregne størrelsen af ​​et array
arr[2]=3 For at overskrive 3. element skal vi bruge det på denne måde. Da indekset starter ved 0, er arr[2] korrekt.
arr+=(40) For at tilføje værdi(er) kan vi bruge + og derefter tildele med = og derfor bruges +=.
str=$(ls) For at gemme ls kommando output som en streng (eksempel 4 er vist for dette output)
arr=( $(ls) ) For at gemme ls output som en række filer (eksempel 5 er vist for dette output)
${arr[@]:s:n} For at hente n elementer, der starter ved indeks s