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 |