Hvordan manipulere og kontrollere data med Bash Array

Hvordan Manipulere Og Kontrollere Data Med Bash Array



En matrisevariabel brukes i et hvilket som helst programmeringsspråk for å lagre flere verdier ved hjelp av en indeks. Matriseindeksen kan være et tall eller en streng. Matrisen som inneholder den numeriske indeksen kalles 'numerisk matrise' og matrisen som inneholder strengverdien som indeksen kalles 'assosiativ matrise'. Både numeriske og assosiative matriser kan opprettes i Bash. Metodene for å manipulere og kontrollere dataene til Bash-matrisen er vist i detalj ved hjelp av 15 eksempler i denne opplæringen.

Liste over innhold:

  1. Definer en matrise etter indeks
  2. Definer en matrise med flere verdier
  3. Definer en assosiativ matrise
  4. Tell matriseverdiene
  5. Les Array Values ​​by Loop
  6. Les de spesielle verdiene til matrisen
  7. Sett inn matriseverdier
  8. Les et filinnhold inn i matrisen
  9. Kombiner matriseverdiene
  10. Endre matriseverdiene
  11. Fjern matriseverdiene
  12. Søk og erstatt matriseverdiene
  13. Bruk en matrise som et funksjonsargument
  14. Returner matrisen fra funksjonen
  15. Gjør matrisen tom

Definer en matrise etter indeks

Metoden for å deklarere en matrise ved å nevne de sekvensielle eller ikke-sekvensielle numeriske indeksene er vist i følgende skript. Denne typen matrise kalles en numerisk matrise. Her opprettes «$books»-matrisen ved å definere tre sekvensielle indekser og «$products»-matrisen opprettes ved å definere fire ikke-sekvensielle indekser. Alle verdier for begge matrisene skrives ut ved å bruke 'printf'-funksjonen.







#!/bin/bash

#Definer matriseindeks i sekvensiell rekkefølge

bøker [ 0 ] = 'Lære bash Shell'

bøker [ 1 ] = 'Ops for cybersikkerhet med bash'

bøker [ 2 ] = 'Bash Command Line Pro-tips'

ekko 'Alle verdier for den første matrisen:'

printf '%s\n' ' ${books[@]} '

#Definer matriseindeks i ikke-sekvensiell rekkefølge

Produkter [ 10 ] = 'Penn'

Produkter [ 5 ] = 'Blyant'

Produkter [ 9 ] = 'Regel'

Produkter [ 4 ] = 'A4-papir'

ekko

ekko 'Alle verdier for den andre matrisen:'

printf '%s\n' ' ${products[@]} '

Produksjon :



Følgende utdata vises etter utføring av skriptet. Verdiene til begge matrisene skrives ut i utdataene. Indeksrekkefølgen opprettholdes på utskriftstidspunktet for utvalget av ikke-sekvensielle indekser:



  p1





Gå til toppen

Definer en matrise med flere verdier

En numerisk matrise med flere verdier kan deklareres ved å bruke 'declare'-kommandoen med -a-alternativet eller uten å bruke 'declare'-kommandoen. I det følgende skriptet deklareres den første matrisen ved å bruke 'declare'-kommandoen og den andre matrisen opprettes uten å bruke 'declare'-kommandoen.



#!/bin/bash

#Deklarer en numerisk matrise med nøkkelordet 'declare'

erklære -en navn = ( 'Michael' 'David' 'Alexander' 'Thomas' 'Robert' 'Richard' )

#Skriv ut matriseverdiene

ekko 'Alle verdier for den første matrisen:'

printf '%s\n' ' ${names[@]} '

#Deklarer en numerisk matrise uten 'declare' nøkkelord

bøker = ( 'Shell Scripting Tutorials' 'Bish Bash Bosh!' 'Lær Bash raskt' )

#Legg til ny linje

ekko

#Skriv ut matriseverdiene

ekko 'Alle verdier for den andre matrisen:'

printf '%s\n' ' ${books[@]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. Verdiene til begge matrisene skrives ut her:

  s2

Gå til toppen

Definer en assosiativ matrise

Matrisen som inneholder strengverdien som indeks kalles en assosiativ matrise. Alternativet -A brukes med kommandoen 'declare' i Bash for å lage en assosiativ Bash-array. I det følgende skriptet erklæres den første assosiative matrisen ved å nevne indeksene separat, og den andre matrisen er deklarert ved å nevne alle nøkkelverdi-par på tidspunktet for matriseerklæringen.

#!/bin/bash

#Deklarer en assosiativ matrisevariabel uten verdi

erklære -EN ansatt

#Tildel verdi separat ved å definere indeksen

ansatt [ 'id' ] = '78564'

ansatt [ 'Navn' ] = 'Tilgjengelig skuespiller'

ansatt [ 'post' ] = 'ADMINISTRERENDE DIREKTØR'

ansatt [ 'lønn' ] = 300 000

#Skriv ut to verdier av matrisen

ekko 'Ansatt ID: ${employee[id]} '

ekko 'Ansattes navn: ${employee[name]} '

#Erklære en assosiativ matrise med verdier

erklære -EN kurs = ( [ kode ] = 'CSE-206' [ Navn ] = 'Objektorientert programmering' [ kreditttime ] = 2.0 )

#Legg til ny linje

ekko

#Skriv ut to matriseverdier av den andre matrisen

ekko 'Kursnavn: ${kurs[navn]} '

ekko 'Kreditttime: ${course[credit_hour]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. De spesielle verdiene til den assosiative matrisen skrives ut her ved å nevne nøkkel- eller indeksverdien:

  s3

Gå til toppen

Tell matriseverdiene

Metoden for å telle de totale elementene i den numeriske matrisen og den assosiative matrisen er vist i følgende skript:

#!/bin/bash

#Deklarer en numerisk matrise

erklære -en navn = ( 'Michael' 'David' 'Alexander' 'Thomas' 'Robert' 'Richard' ) ;

ekko 'Lengden på den numeriske matrisen er ${#names[@]} '

#Erklære en assosiativ matrise

erklære -EN kurs = ( [ kode ] = 'CSE-206' [ Navn ] = 'Objektorientert programmering' [ kreditttime ] = 2.0 )

ekko 'Lengden på den assosiative matrisen er ${#kurs[@]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. Matriselengden til de numeriske og assosiative matrisene skrives ut her:

  s4

Gå til toppen

Les Array Values ​​by Loop

Metoden for å lese alle verdiene til en numerisk matrise og en assosiativ matrise ved å bruke 'for'-løkken er vist i følgende skript:

#!/bin/bash

#Deklarer en numerisk matrise

erklære -en bøker = ( 'Shell Scripting Tutorials' 'Bish Bash Bosh!' 'Lær Bash raskt' )

#Skriv ut de numeriske matriseverdiene

ekko 'Numeriske matriseverdier er:'

til i i ' ${books[@]} '

gjøre

ekko ' $in '

ferdig

ekko

#Erklære en assosiativ matrise med verdier

erklære -EN klienter = (

[ id ] = 'H-5623'

[ Navn ] = 'MR. Ahnaf'

[ adresse ] = '6/A, Dhanmondi, Dhaka.'

[ telefon ] = '+8801975642312' )

#Skriv ut de assosiative matriseverdiene

ekko 'Associative matriseverdier er:'

til k i ' ${!clients[@]} '

gjøre

ekko ' $k => ${clients[$k]} '

ferdig

Produksjon :

Følgende utdata vises etter utføring av skriptet. Her skrives verdiene til den numeriske matrisen og nøkkelverdi-parene til den assosiative matrisen ut i utdataene:

  p5

Gå til toppen

Les det spesielle verdiområdet til matrisen

Matriseverdiene for det bestemte området av indeksene vises i følgende skript. I skriptet er en numerisk matrise med fire elementer definert. To matriseverdier fra den andre indeksen til matrisen skrives ut senere.

#!/bin/bash

#Deklarer en numerisk matrise

erklære -en kaker = ( 'Sjokoladekake' 'Vaniljekake' 'Red Velvet Cake' 'jordbær kake' )

#Skriv ut de spesielle matriseverdiene

ekko 'Det andre og tredje elementet i matriseverdiene er:'

printf '%s\n' ' ${kaker[@]:1:2} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. Den andre og tredje verdien av matrisen er 'Vanilla Cake' og 'Red Velvet Cake' som er skrevet ut i utdataene:

  s6

Gå til toppen

Sett inn matriseverdien

Metoden for å legge til flere verdier på slutten av matrisen er vist i følgende skript. Hovedmatrisen som er '$books' inneholder tre elementer og to elementer legges til på slutten av '$books'-matrisen.

#!/bin/bash

#Deklarer en numerisk matrise

erklære -en bøker = ( 'Shell Scripting Tutorials' 'Bish Bash Bosh!' 'Lær Bash raskt' )

#Skriv ut matriseverdiene før du setter inn

ekko 'Matriseverdier:'

printf '%s\n' ' ${books[@]} '

ekko

bøker = ( ' ${books[@]} ' 'Linux Command Line and Shell Scripting Bible' 'Advanced Bash Scripting Guide av Mendel Cooper' )

#Skriv ut matriseverdiene etter innsetting

ekko 'Matriseverdier etter innsetting av to verdier:'

printf '%s\n' ' ${books[@]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. Matriseverdiene før og etter innsetting av nye verdier skrives ut i utdataene:

  s7

Gå til toppen

Les filinnholdet inn i matrisen

Lag en tekstfil kalt 'fruits.txt' med følgende innhold for å teste skriptet i dette eksemplet:

frukt.txt

Mango

Jackfrukt

Ananas

oransje

Banan

I det følgende skriptet lagres innholdet i en fil i en matrise kalt '$data'. Her lagres hver linje i filen som hvert element i matrisen. Deretter skrives matriseverdiene ut.

#!/bin/bash

#Les filnavnet fra brukeren

lese -s 'Skriv inn filnavnet:' filnavn

hvis [ -f $filnavn ]

deretter

#Les filinnholdet inn i en matrise'

data = ( ` katt ' $filnavn ' ` )

ekko 'Innholdet i filen er gitt nedenfor:'

#Les filen linje for linje

til linje i ' ${data[@]} '

gjøre

ekko $line

ferdig

være

Produksjon :

Følgende utdata vises etter utføring av skriptet. Utdataene som vises av 'cat'-kommandoen og utdataene fra skriptet er like fordi den samme filen åpnes av 'cat'-kommandoen og skriptet:

  s8

Gå til toppen

Kombiner matriseverdiene

En ny matrise opprettes ved å kombinere verdiene til flere matriser. I det følgende skriptet er to numeriske arrays av strenger definert. Deretter opprettes en ny matrise ved å kombinere verdiene til disse matrisene.

#!/bin/bash

#Deklarer den første matrisen

erklære -en navneliste1 = ( 'Michael' 'David' 'Alexander' 'Thomas' )

ekko 'De første matriseverdiene er:'

printf '%s, ' ${nameList1[@]}

ekko

#Deklarer den andre matrisen

erklære -en navneliste2 = ( 'Robert' 'Richard' )

ekko 'Den andre matriseverdiene er:'

printf '%s, ' ${nameList2[@]}

ekko

#Opprett en ny matrise ved å kombinere to matriser

kombinert_array = ( ' ${nameList1[@]} ' ' ${nameList2[@]} ' )

ekko 'De kombinerte matriseverdiene er:'

printf '%s, ' ${combined_array[@]}

ekko

Produksjon :

Følgende utdata vises etter utføring av skriptet. Her skrives verdiene til tre matriser ut i utdataene. Den tredje matrisen inneholder alle verdiene til den første og andre matrisen:

  s9

Gå til toppen

Endre matriseverdiene

Metoden for å oppdatere en eller flere matriseverdier ved å nevne indeksen vises i følgende skript:

#!/bin/bash

#Deklarer den første matrisen

erklære -en navneliste = ( 'Michael' 'David' 'Alexander' 'Thomas' )

ekko 'Matriseverdier:'

printf '%s, ' ${nameList[@]}

ekko

#Oppdater den andre verdien til matrisen

navneliste [ 1 ] = 'Robert'

ekko 'Matriseverdier etter oppdatering:'

printf '%s, ' ${nameList[@]}

ekko

Produksjon :

Følgende utdata vises etter utføring av skriptet. Verdiene til hovedmatrisen og de oppdaterte matrisene skrives ut i utdataene:

  s10

Fjern matriseverdiene

Kommandoen 'unset' brukes til å fjerne det spesielle elementet eller alle elementene i matrisen. I det følgende skriptet fjernes det andre elementet i matrisen.

#!/bin/bash

#Deklarer en numerisk matrise

erklære -en bøker = ( 'Shell Scripting Tutorials' 'Bish Bash Bosh!' 'Lær Bash raskt' )

#Skriv ut matriseverdiene før du fjerner

ekko 'Matriseverdier:'

printf '%s\n' ' ${books[@]} '

ekko

#Fjern det andre elementet

deaktivert bøker [ 1 ]

#Skriv ut matriseverdiene etter fjerning

ekko 'Array-verdier etter fjerning av den andre verdien:'

printf '%s\n' ' ${books[@]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. Verdiene til hovedmatrisen og matriseverdiene etter fjerning av én verdi skrives ut i utdataene:

  s11

Gå til toppen

Søk og erstatt matriseverdiene

I det følgende skriptet erstattes den spesielle verdien til matrisen med en annen verdi hvis søkeverdien som er definert i mønsteret, samsvarer med en hvilken som helst verdi av «$names»-matrisen.

#!/bin/bash

#Deklarer den første matrisen

erklære -en navn = ( 'Michael' 'David' 'Alexander' 'Thomas' )

#Skriv ut de originale matriseverdiene

ekko 'Originale matriseverdier:'

printf '%s\n' ' ${names[@]} '

#Generer streng etter å ha erstattet matriseverdiene

oppdatert_array = ${names[@]/Alexander/Richard}

#Skriv ut matriseverdiene etter erstatning

ekko 'Matriseverdier etter erstatning:'

printf '%s\n' ' ${updated_array[@]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. Verdiene til hovedmatrisen og matriseverdiene etter å ha erstattet en verdi skrives ut i utdataene:

  s12

Gå til toppen

Bruk en matrise som et funksjonsargument

I det følgende skriptet sendes en matrisevariabel som funksjonsargument, og verdiene til den matrisen skrives ut senere.

#!/bin/bash

#Deklarer en rekke tall

erklære -en tall = ( 10 6 Fire fem 1. 3 8 )

#Definer en funksjon som tar en argumentverdi

func ( )

{

#Les det første argumentet

tall = $1

#Skriv ut matriseverdiene

ekko 'Matriseverdier:'

printf '%d\n' ' ${numbers[@]} '

}

#Kall funksjonen med matrisen som argument

func ' ${numbers[@]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet:

  s13

Gå til toppen

Returner en matrise fra funksjonen

I det følgende skriptet kalles funksjonen med fire numeriske argumenter. En matrise opprettes med argumentverdiene, og den matrisen returneres fra funksjonen til den som ringer.

#!/bin/bash

#Definer en funksjon som leser fire argumentverdier

func ( )

{

#Les argumentverdiene

tall = ( $1 $2 $3 $4 )

#Returner matrisen

ekko ' ${numbers[@]} '

}

#Kall funksjonen med tre argumenter

retur_verdi =$ ( func 78 Fire fem 90 23 )

#Lagre returverdien i en matrise

lese -en på en <<< $return_val

#Skriv ut verdiene til den returnerte matrisen

ekko 'Verdiene til matrisen er:'

til i i ' ${num[@]} '

gjøre

ekko ' $in '

ferdig

Produksjon :

Følgende utdata vises etter utføring av skriptet:

Gå til toppen

Gjør matrisen tom

Følgende skript viser metoden for å gjøre en matrise tom ved å bruke kommandoen 'unset'. Det totale antallet matriseverdier skrives ut før og etter at matrisen er tom.

#!/bin/bash

#Deklarer en rekke tall

erklære -en tall = ( 10 6 Fire fem 1. 3 80 )

ekko 'Antall matriseverdier: ${#numbers[@]} '

#Gjør matrisen tom

deaktivert tall

ekko 'Antall matriseverdier etter at matrisen er tom: ${#numbers[@]} '

Produksjon :

Følgende utdata vises etter utføring av skriptet. Antall elementer i matrisen ble 0 etter å ha gjort matrisen tom:

  s15

Gå til toppen

Konklusjon

Ulike metoder for å deklarere, få tilgang til, endre og fjerne array-variablene i Bash-skriptet er vist i denne opplæringen ved hjelp av 15 enkle eksempler. Vi håper at denne opplæringen vil hjelpe Bash-brukerne til å kjenne bruken av Bash-array i detalj.