logo

Bash Scripting – Matrice

Matrice sunt concepte importante în programare sau scripting. Matricele ne permit să stocăm și să recuperăm elemente într-o formă de listă care poate fi folosită pentru anumite sarcini. În bash, avem și matrice care ne ajută să creăm scripturi în linia de comandă pentru stocarea datelor într-un format de listă. În acest articol, vom înțelege elementele de bază ale matricelor în scripting bash.

Crearea de tablouri

Pentru a crea o matrice de bază într-un script bash, putem folosi declararea -A comanda urmată de numele variabilei matricei pe care doriți să o dați.

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

SAU



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

Valoarea elementelor poate fi orice număr întreg sau șiruri de caractere sau orice altă formă de date, după cum se dorește. Putem vedea că matricea este declarată într-un script bash în două moduri, primul pare mai convenabil și mai puțin agitat de declarat. Dacă vrem să declarăm matricea dintr-o singură mișcare, prima este alegerea optimă, dar dacă elementele urmează să fie adăugate în bucăți, cea din urmă este o alegere bună.

Imprimarea matricelor

După declararea matricei, dacă dorim să afișam toate elementele din matrice, putem folosi simbolul @.

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

echo '${array_name[@]}'>

Folosim [@] ca index al matricei pentru a afișa toate elementele. Toate elementele sunt imprimate cu spații separate, ghilimelele din jurul variabilei se extind și imprimă toate elementele din matrice.

Iterarea peste Array

Pentru a itera pe o matrice câte un element, putem folosi bucle și efectua orice operație în corpul acestuia.

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

După cum putem vedea, am folosit o buclă for pentru a imprima elementul din matrice unul câte unul. Am folosit trucul din secțiunea anterioară de a obține toate elementele matricei și de a repeta peste ele unul câte unul într-o buclă for. ${array_name[@]} se extinde în toate elementele din matrice și bucla for iterează peste ele unul câte unul cu iteratorul din exemplul acesta este variabila i , în interiorul corpului buclei for tipărim variabilă/iterator i și astfel iterează peste matrice.

Obțineți numărul de elemente din Array

Pentru a prelua numărul de elemente ale matricei, putem folosi operatorul # înaintea numelui matricei în s în ${array_name[@]}.

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

Revenim astfel dimensiunea matricei folosind comanda ${#sport[@]}, # este folosit pentru a obține dimensiunea variabilei de lângă ea, folosind ghilimelele duble se evaluează valoarea comenzii și obținem numărul elementelor din matrice după cum se dorește.

Inserarea unui element în Array

Pentru a insera un element este destul de simplu, trebuie să setăm indexul corespunzător al elementului, urmat de valoarea elementului pe care ți-a plăcut să-l dai.

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

Am adăugat al 5-lea element (al 4-lea index) în matrice și am modificat/editat, de asemenea, al 3-lea element al matricei (al doilea indice). The arrayname[index]=valoare sunt toate trucurile pentru a adăuga, modifica sau inițializa elementele matricei.

De asemenea, putem adăuga elemente la o matrice folosind operatorul +=.

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

După cum se vede în exemplu, putem adăuga mai multe elemente la matrice cu cod minim. Folosim array_name+=(elements) pentru a adăuga elemente la matrice.

Ștergerea unui element din Array

Pentru a șterge un element din matrice, putem folosi comanda unset. Comanda preia numele variabilei în cazul nostru numele matricei și indexul acelui element. Indicele poate fi, de asemenea, relativ, adică -1 indicând ultimul element și -2 până la ultimul și așa mai departe.

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

După cum putem vedea, unset arrayname[index] va șterge elementul de la index din matrice. De asemenea, dimensiunea matricei a fost redusă la 3 din 4, ceea ce indică faptul că elementul este eliminat în întregime și nu doar înlocuit cu spații albe.

Folosind indici relativi

Dacă folosim indici ca -1,-2 și așa mai departe, elementele sunt referite de la ultimul element și, prin urmare, le putem șterge sau modifica cu ordonare relativă și din spate.

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

După cum putem vedea, indexul 1 este, de asemenea, referit ca -3 din spate și, prin urmare, devine relativ mai ușor să faceți referire la anumite elemente într-o matrice mare.

Îmbinați o matrice

Putem îmbina (să scoateți o poțiune) o matrice pentru a o aloca sau tipări la o altă variabilă/matrice.

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

Am scos o bucată din matricea sport, adică elementul dintre indexul 1 și 3 inclusiv și l-am atribuit variabilei arr, care este, de asemenea, o matrice. Operatorul @ primește toate elementele din matrice și apoi putem îmbina matricea între indicii 1 și 3, astfel încât să avem elementele la 1, 2 și 3 (cricket, hochei și baseball) din matricea sport.

Definiți o matrice statică și imprimați elementele matricei

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

În 2 moduri putem imprima elemente de matrice statică

Execuția programului

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

Trecerea argumentelor liniei de comandă într-un fișier script

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

Scriptul de mai sus poate fi executat ca

# Aici Java, Python și Ruby sunt argumente în linia de comandă

șir de mai multe linii javascript
sh arrayCheck.sh Java Python Ruby>

Pașii de execuție a scriptului:

programmingArray=(Java Python Ruby)

#Java va fi prezent la indexul 0, dimensiunea acestuia poate fi calculată în modul de mai jos

${#programmingArray[0]}

În mod similar, Python va fi prezent la primul index, dimensiunea acestuia poate fi calculată în modul de mai jos

${#programmingArray[1]}

Ieșire:

Iterarea valorilor matricei folosind bucla for

$@ va da toate valorile care au fost transmise prin argumente din linia de comandă și este stocată într-o matrice.

Poate fi repetat folosind bucla for

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

Ieșire:

Să aruncăm o privire rapidă asupra a ceea ce reprezintă fiecare simbol

Sintaxă

Ieșire
arr=()

arr[0]=3 Suprascrierea primului element

arr+=(4) Adăugați valori

str=$(ls) Salvați ieșirea ls ca șir

arr=( $(ls) ) Salvați ieșirea ls ca o matrice de fișiere

${arr[@]:s:n} Preluați n elemente începând de la index

#Putem oferi un set de valori

ca aceasta

arr=(unu doi trei)

Pentru a inițializa o matrice
${arr[0]} Pentru a prelua primul element. Indicele începe întotdeauna cu 0
${arr[@]} Pentru a prelua toate elementele și apoi putem repeta într-o buclă
${!arr[@]} Pentru a prelua indicii de matrice singur
${#arr[@]} Pentru a calcula dimensiunea unui tablou
arr[2]=3 Pentru a suprascrie al treilea element, trebuie să-l folosim în acest fel. Deoarece indexul începe de la 0, arr[2] este corect.
arr+=(40) Pentru a adăuga valori, putem folosi + și apoi alocați cu = și, prin urmare, se folosește +=.
str=$(ls) Pentru a salva ieșirea comenzii ls ca șir (exemplul 4 este afișat pentru această ieșire)
arr=( $(ls) ) Pentru a salva ieșirea ls ca o matrice de fișiere (exemplul 5 este afișat pentru această ieșire)
${arr[@]:s:n} Pentru a prelua n elemente începând cu indexul s