Bash Scripting – Array
Matriser är viktiga begrepp inom programmering eller skript. Arrayer tillåter oss att lagra och hämta element i en listform som kan användas för vissa uppgifter. I bash har vi också arrayer som hjälper oss att skapa skript på kommandoraden för att lagra data i ett listformat. I den här artikeln kommer vi att förstå grunderna för arrayer i bash-skript.
Skapa arrayer
För att skapa en grundläggande array i ett bash-skript kan vi använda deklarationen -a kommando följt av namnet på den arrayvariabel du vill ange.
#!/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ärdet på elementen kan vara vilket heltal eller strängar som helst eller vilken annan form av data som helst. Vi kan se att arrayen deklareras i ett bash-skript på två sätt, det förra verkar bekvämare och mindre hektiskt att deklarera. Om vi vill deklarera arrayen på en gång är det förra det optimala valet, men om elementen ska läggas till i bitar och bitar är det senare ett bra val.
Skriva ut arrayerna
Efter att ha deklarerat arrayen, om vi vill visa alla element i arrayen kan vi använda @-symbolen.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}'
echo '${array_name[@]}' Vi använder [@] som ett index till arrayen för att visa alla element. Alla element är tryckta med mellanslagsseparerade, citattecken runt variabeln expanderar och skriver ut alla element i arrayen.
Itererar över Arrayen
För att iterera över en array ett element i taget, kan vi använda loopar och utföra alla operationer i kroppen av den.
#!/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 använt en for-loop för att skriva ut elementet från arrayen en efter en. Vi har använt tricket i föregående avsnitt att få alla element i arrayen och iterera över det en efter en i for a loop. ${array_name[@]} expanderar till alla element i arrayen och for-loopen itererar över dem en efter en med iteratorn i exemplet det är variabel i , inuti kroppen av for-slingan skriver vi ut variabel/iterator i och på så sätt iterera över arrayen.
Få antalet element i Arrayen
För att hämta numret på elementen array kan vi använda operatorn # före arraynamnet i s i ${array_name[@]}.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}'
Vi returnerar alltså storleken på arrayen genom att använda kommandot ${#sport[@]}, # används för att få storleken på variabeln bredvid, med hjälp av dubbla citattecken utvärderas kommandots värde och vi får antalet element i arrayen efter önskemål.
Infoga ett element i Array
Att infoga ett element är ganska enkelt, vi måste ställa in elementets lämpliga index följt av värdet på elementet du gillade att ge.
#!/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 till det 5:e elementet (4:e index) i arrayen och även modifierat/redigerat arrayens 3:e element (2nd index). De matrisnamn[index]=värde är alla knep för att lägga till, modifiera eller initiera elementen i arrayen.
Vi kan också lägga till element i en array med +=-operatorn.
#!/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 framgår av exemplet kan vi lägga till flera element till arrayen med minimal kod. Vi använder array_name+=(elements) för att lägga till element till arrayen.
Ta bort ett element från Array
För att ta bort ett element från arrayen kan vi använda kommandot unset. Kommandot tar in namnet på variabeln i vårt fall arraynamnet och indexet för det elementet. Indexet kan också vara relativt, dvs -1 anger det sista elementet och -2 till näst sist och så vidare.
#!/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 kommer unset arrayname[index] att ta bort elementet vid index från arrayen. Dessutom har storleken på arrayen minskats till 3 från 4, vilket indikerar att elementet är helt borttaget och inte bara ersatt med blanksteg.
Använda relativa index
Om vi använder index som -1,-2, och så vidare, refereras elementen från det sista elementet, och därför kan vi ta bort eller ändra dem med relativ ordning bakifrån också.
#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}'
Som vi kan se refereras index 1 också till som -3 från baksidan och därför blir det relativt lättare att referera till vissa element i en stor array.
Splitsa en Array
Vi kan skarva (ta ut en dryck) en array för att tilldela eller skriva ut den till en annan 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 tagit ut en bit från sportarrayen, dvs elementet mellan index 1 och 3 inklusive, och tilldelat det till arr-variabeln som också är en array. @-operatorn hämtar alla element från arrayen och sedan kan vi splitsa arrayen mellan index 1 och 3 så att vi har elementen på 1,2 och 3 (cricket, hockey och baseball) från sportarrayen.
Definiera en statisk array och skriv ut elementen i arrayen
#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å två sätt kan vi skriva ut element av statisk array
Programutförande
sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here
Skicka kommandoradsargumenten 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]}
Ovanstående skript kan köras som
# Här är Java, Python och Ruby kommandoradsargument
sh arrayCheck.sh Java Python Ruby
Skriptkörningssteg:
programmeringArray=(Java Python Ruby)
#Java kommer att finnas på det 0:e indexet, dess storlek kan beräknas på nedanstående sätt
${#programmingArray[0]}
På liknande sätt kommer Python att vara närvarande vid det första indexet, dess storlek kan beräknas på nedanstående sätt
${#programmingArray[1]}
Produktion:
Itererar arrayvärdena med för loop
$@ kommer att ge alla värden som skickades via kommandoradsargument och det lagras i en array.
Det kan upprepas genom att använda for-slingan
declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done
Produktion:
Låt oss ta en snabb titt på vad varje symbol representerar
| Syntax | Produktion |
| arr=() | arr[0]=3 Skriv över det första elementet arr+=(4) Lägg till värde(n) str=$(ls) Spara ls-utdata som en sträng arr=( $(ls) ) Spara ls-utdata som en uppsättning filer ${arr[@]:s:n} Hämta n element som börjar vid index |
| #Vi kan tillhandahålla en uppsättning värden så här arr=(en två tre) | För att initiera en array |
| ${arr[0]} | För att hämta det första elementet. Index börjar alltid med 0 |
| ${arr[@]} | För att hämta alla element och därefter kan vi iterera i en loop |
| ${!arr[@]} | För att enbart hämta matrisindex |
| ${#arr[@]} | För att beräkna storleken på en array |
| arr[2]=3 | För att skriva över det tredje elementet måste vi använda det på detta sätt. Eftersom indexet börjar på 0 är arr[2] korrekt. |
| arr+=(40) | För att lägga till värde(n) kan vi använda + och sedan tilldela med = och därför används +=. |
| str=$(ls) | För att spara ls-kommandot som en sträng (exempel 4 visas för denna utgång) |
| arr=( $(ls) ) | För att spara ls-utdata som en array av filer (exempel 5 visas för denna utdata) |
| ${arr[@]:s:n} | För att hämta n element som börjar vid index s |