GNU/Linux >> Linux Esercitazione >  >> Linux

Il tutorial Ultimate Bash Array con 15 esempi

Un array è una variabile contenente più valori che possono essere dello stesso tipo o di tipo diverso. Non esiste un limite massimo alla dimensione di una matrice, né alcun requisito che le variabili membro siano indicizzate o assegnate in modo contiguo. L'indice dell'array inizia con zero.

In questo articolo, esaminiamo 15 diverse operazioni sugli array in bash.

Questo articolo fa parte della serie in corso di Bash Tutorial. Per coloro che sono nuovi allo scripting di bash, inizia subito dal tutorial introduttivo allo scripting di Bash.

1. Dichiarazione di un array e assegnazione di valori

In bash, l'array viene creato automaticamente quando viene utilizzata una variabile in un formato come,

name[index]=value
  • nome è un nome qualsiasi per un array
  • l'indice potrebbe essere qualsiasi numero o espressione che deve restituire un numero maggiore o uguale a zero. Puoi dichiarare un array esplicito usando dichiarare -a arrayname.
$ cat arraymanip.sh
#! /bin/bash
Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${Unix[1]}

$./arraymanip.sh
Red hat

Per accedere a un elemento da un array, usa le parentesi graffe come ${name[index]}.

2. Inizializzazione di un array durante la dichiarazione

Invece di inizializzare ogni elemento di un array separatamente, puoi dichiarare e inizializzare un array specificando l'elenco degli elementi (separati da uno spazio bianco) tra parentesi graffe.

Syntax:
declare -a arrayname=(element1 element2 element3)

Se gli elementi hanno il carattere spazio bianco, racchiudelo tra virgolette.

#! /bin/bash
$cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');

dichiarare -a dichiara un array e tutti gli elementi tra parentesi sono gli elementi di un array.

3. Stampa l'intera matrice Bash

Esistono diversi modi per stampare tutti gli elementi dell'array. Se il numero di indice è @ o *, viene fatto riferimento a tutti i membri di una matrice. Puoi attraversare gli elementi dell'array e stamparlo, usando le istruzioni di ciclo in bash.

echo ${Unix[@]}

# Add the above echo statement into the arraymanip.sh
#./t.sh
Debian Red hat Ubuntu Suse

Fare riferimento al contenuto di una variabile membro di un array senza fornire un numero di indice equivale a fare riferimento al contenuto del primo elemento, quello a cui si fa riferimento con il numero di indice zero.

4. Lunghezza dell'array Bash

Possiamo ottenere la lunghezza di un array usando il parametro speciale chiamato $#.

${#arrayname[@]} ti dà la lunghezza dell'array.

$ cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora');
echo ${#Unix[@]} #Number of elements in the array
echo ${#Unix}  #Number of characters in the first element of the array.i.e Debian
$./arraymanip.sh
4
6

5. Lunghezza dell'ennesimo elemento in un array

${#arrayname[n]} dovrebbe fornire la lunghezza dell'ennesimo elemento in un array.

$cat arraymanip.sh
#! /bin/bash

Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${#Unix[3]} # length of the element located at index 3 i.e Suse

$./arraymanip.sh
4

6. Estrazione per offset e lunghezza per un array

L'esempio seguente mostra il modo per estrarre 2 elementi a partire dalla posizione 3 da un array chiamato Unix.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]:3:2}

$./arraymanip.sh
Suse Fedora

L'esempio precedente restituisce gli elementi nel 3° indice e nel quarto indice. L'indice inizia sempre con zero.

7. Estrazione con offset e lunghezza, per un particolare elemento di un array

Per estrarre solo i primi quattro elementi da un elemento dell'array. Ad esempio, Ubuntu che si trova al secondo indice di un array, puoi usare offset e lunghezza per un particolare elemento di un array.

$cat arraymanip.sh
#! /bin/bash

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[2]:0:4}

./arraymanip.sh
Ubun

L'esempio sopra estrae i primi quattro caratteri dal 2° elemento indicizzato di un array.

8. Cerca e sostituisci in un elemento dell'array

L'esempio seguente cerca Ubuntu in un elemento dell'array e lo sostituisce con la parola "SCO Unix".

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

echo ${Unix[@]/Ubuntu/SCO Unix}

$./arraymanip.sh
Debian Red hat SCO Unix Suse Fedora UTS OpenLinux

In questo esempio, sostituisce l'elemento nel 2° indice 'Ubuntu' con 'SCO Unix'. Ma questo esempio non sostituirà permanentemente il contenuto dell'array.

9. Aggiungi un elemento a un array Bash esistente

L'esempio seguente mostra il modo per aggiungere un elemento all'array esistente.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "AIX" "HP-UX")
echo ${Unix[7]}

$./arraymanip.sh
AIX

Nell'array chiamato Unix, gli elementi "AIX" e "HP-UX" vengono aggiunti rispettivamente al 7° e all'8° indice.

10. Rimuovere un elemento da un array

unset viene utilizzato per rimuovere un elemento da un array.unset avrà lo stesso effetto dell'assegnazione di null a un elemento.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

unset Unix[3]
echo ${Unix[3]}

Lo script precedente stamperà semplicemente null, che è il valore disponibile nel 3° indice. L'esempio seguente mostra un modo per rimuovere completamente un elemento da un array.

$ cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
pos=3
Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))})
echo ${Unix[@]}

$./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

In questo esempio, ${Unix[@]:0:$pos} ti darà 3 elementi a partire dal 0° indice cioè 0,1,2 e ${Unix[@]:4} darà gli elementi dal 4° indice al ultimo indice. E unisci entrambi l'output sopra. Questa è una delle soluzioni alternative per rimuovere un elemento da un array.

11. Rimuovi gli elementi dell'array Bash usando i modelli

Nella condizione di ricerca puoi fornire i modelli e archiviare l'elemento rimanente in un altro array come mostrato di seguito.

$ cat arraymanip.sh
#!/bin/bash
declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora');
declare -a patter=( ${Unix[@]/Red*/} )
echo ${patter[@]}

$ ./arraymanip.sh
Debian Ubuntu Suse Fedora

L'esempio sopra rimuove gli elementi che hanno il picchiettio Rosso*.

12. Copia di un array

Espandi gli elementi dell'array e archiviali in un nuovo array come mostrato di seguito.

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Linux=("${Unix[@]}")
echo ${Linux[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

13. Concatenazione di due Bash Array

Espandi gli elementi dei due array e assegnalo al nuovo array.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
echo ${UnixShell[@]}
echo ${#UnixShell[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh
14

Stampa l'array che contiene gli elementi sia dell'array "Unix" che "Shell" e il numero di elementi del nuovo array è 14.

14. Eliminazione di un intero array

unset viene utilizzato per eliminare un intero array.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
unset UnixShell
echo ${#UnixShell[@]}

$ ./arraymanip.sh
0

Dopo aver annullato l'impostazione di un array, la sua lunghezza sarebbe zero come mostrato sopra.

15. Carica il contenuto di un file in un array

Puoi caricare il contenuto del file riga per riga in un array.

#Example file
$ cat logfile
Welcome
to
thegeekstuff
Linux
Unix

$ cat loadcontent.sh
#!/bin/bash
filecontent=( `cat "logfile" `)

for t in "${filecontent[@]}"
do
echo $t
done
echo "Read file content!"

$ ./loadcontent.sh
Welcome
to
thegeekstuff
Linux
Unix
Read file content!

Nell'esempio sopra, ogni indice di un elemento dell'array è stato stampato attraverso il ciclo for.

Lettura consigliata

Bash 101 Hacks, di Ramesh Natarajan . Passo la maggior parte del mio tempo in ambiente Linux. Quindi, naturalmente sono un grande fan della riga di comando di Bash e degli script di shell. 15 anni fa, quando stavo lavorando su diverse versioni di *nix, scrivevo molto codice sulla shell C e sulla shell Korn. Negli anni successivi, quando ho iniziato a lavorare su Linux come amministratore di sistema, ho praticamente automatizzato ogni possibile attività utilizzando lo scripting della shell Bash. Sulla base della mia esperienza con Bash, ho scritto l'eBook Bash 101 Hacks che contiene 101 esempi pratici sia sulla riga di comando di Bash che sugli script di shell. Se stavi pensando di padroneggiare Bash, fatti un favore e leggi questo libro, che ti aiuterà a prendere il controllo della tua riga di comando di Bash e degli script della shell.


Linux
  1. Il tutorial del comando Numfmt con esempi per principianti

  2. Il tutorial sui comandi di tipo con esempi per principianti

  3. Il tutorial sul comando Shuf con esempi per principianti

  4. Matrici Bash con esempi

  5. '&&' vs. '&' con il comando 'test' in Bash

Bash Scripting – Array associativo spiegato con esempi

Bash Scripting – Array indicizzato spiegato con esempi

La guida definitiva al download di Wget con 15 fantastici esempi

The Ultimate Tar Command Tutorial con 10 esempi pratici

Tutorial sulle funzioni di Bash Shell con 6 esempi pratici

HowTo:l'esercitazione definitiva sui comandi Logrotate con 10 esempi