Array in soccorso!
Finora, hai utilizzato un numero limitato di variabili nel tuo script bash, hai creato poche variabili per contenere uno o due nomi di file e nomi utente.
Ma cosa succede se hai bisogno di più di poche variabili nei tuoi script bash; supponiamo che tu voglia creare uno script bash che legga un centinaio di input diversi da un utente, creerai 100 variabili?
Fortunatamente, non è necessario perché gli array offrono una soluzione molto migliore.
Creazione del tuo primo array in uno script bash
Supponiamo che tu voglia creare uno script bash timestamp.sh che aggiorna il timestamp di cinque diversi file.
Innanzitutto, usa l'approccio ingenuo di utilizzare cinque diverse variabili:
#!/bin/bash
file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"
touch $file1
touch $file2
touch $file3
touch $file4
touch $file5
Ora, invece di usare cinque variabili per memorizzare il valore dei cinque nomi di file, crei un array che contiene tutti i nomi di file, ecco la sintassi generale di un array in bash:
array_name=(value1 value2 value3 … )
Quindi ora puoi creare un array denominato file che memorizza tutti e cinque i nomi di file che hai utilizzato in timestamp.sh script come segue:
files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")
Come puoi vedere, questo è molto più pulito ed efficiente poiché hai sostituito cinque variabili con un solo array!
Accesso agli elementi dell'array in bash
Il primo elemento di un array inizia all'indice 0
e quindi per accedere all'ennesimo elemento dell'array si usa il n -1
indice.
Ad esempio, per stampare il valore dell'elemento 2 dell'array di file, puoi utilizzare la seguente istruzione echo:
echo ${files[1]}
e per stampare il valore dell'elemento 3 del tuo array di file, puoi usare:
echo ${files[2]}
e così via.
Il seguente script bash reverse.sh stamperebbe tutti e cinque i valori nell'array di file in ordine inverso, iniziando dall'ultimo elemento dell'array:
#!/bin/bash
files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")
echo ${files[4]}
echo ${files[3]}
echo ${files[2]}
echo ${files[1]}
echo ${files[0]}
So che ti starai chiedendo perché così tante dichiarazioni di eco e perché non uso un ciclo qui. Questo perché ho intenzione di introdurre concetti di bash loop più avanti in questa serie .
Puoi anche stampare tutti gli elementi dell'array contemporaneamente:
echo ${files[*]}
f1.txt f2.txt f3.txt f4.txt f5.txt
Puoi stampare il numero totale degli elementi dell'array dei file, ovvero la dimensione dell'array :
echo ${#files[@]}
5
Puoi anche aggiornare il valore di qualsiasi elemento di un array; ad esempio, puoi modificare il valore del primo elemento dell'array di file in "a.txt" utilizzando la seguente assegnazione:
files[0]="a.txt"
Aggiunta di elementi dell'array in bash
Creiamo un array che contenga il nome delle popolari distribuzioni Linux:
distros=("Ubuntu" "Red Hat" "Fedora")
La corrente dell'array distro contiene tre elementi. Puoi utilizzare il +=
operatore per aggiungere (aggiungere) un elemento alla fine dell'array.
Ad esempio, puoi aggiungere Kali all'array distros come segue:
distros+=("Kali")
Ora l'array distros contiene esattamente quattro elementi dell'array con Kali che è l'ultimo elemento dell'array.
Eliminazione degli elementi dell'array in bash
Per prima cosa creiamo una matrice num che memorizzerà i numeri da 1 a 5:
num=(1 2 3 4 5)
Puoi stampare tutti i valori nell'array num:
echo ${num[*]}
1 2 3 4 5
Puoi eliminare l'elemento 3 dell'array num usando unset
shell integrata:
unset num[2]
Ora se stampi tutti i valori dell'array num:
echo ${num[*]}
1 2 4 5
Come puoi vedere, il terzo elemento dell'array num è stato cancellato.
Puoi anche eliminare l'intero array num allo stesso modo:
unset num
Creazione di array ibridi con diversi tipi di dati
In bash, a differenza di molti altri linguaggi di programmazione, puoi creare un array che contiene diversi tipi di dati. Dai un'occhiata al seguente user.sh script bash:
#!/bin/bash
user=("john" 122 "sudo,developers" "bash")
echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"
Si noti che l'array utente contiene quattro elementi:
- "Giovanni" ----> Tipo di dati stringa
- 122 ---> Tipo di dati intero
- "sudo,developers" ---> Tipo di dati stringa
- "bash" ---> Tipo di dati stringa
Quindi, è assolutamente possibile archiviare diversi tipi di dati nello stesso array. Non è fantastico?
Questo ci porta alla fine di questo tutorial; Spero ti sia piaciuto! Se vuoi qualcosa di più complicato e un esempio del mondo reale, dai un'occhiata a come dividere le stringhe in bash usando gli array.
E, naturalmente, puoi mettere in pratica ciò che hai appena appreso risolvendo i problemi e fare riferimento alle loro soluzioni se rimani bloccato o hai bisogno di un suggerimento.
Bash Capitolo 4 Domande pratiche Problemi e loro soluzione per esercitarsi con gli array BashBash-Capitolo-4-Domande pratiche-Linux-Handbook.pdf29 KB
Nel prossimo capitolo, ti mostrerò come usare vari operatori aritmetici bash.
Caricamento in corso...