lunedì 14 gennaio 2013

Gli arrays in bash

E dopo tanto tempo si ritorna finalmente a mettere mani sul Progetto Bash.

Nemmeno ricordo a quando risale l'ultimo post.

Bene! In questo articolo ci occuperemo di arrays. Ovviamente io continuo a curare la parte teorica e il caro Lightuono la parte pratica.

Ma cos'è un array?
Niente più che una variabile; che però, a differenza della variabile cosiddetta scalare, l'array contiene più valori.

Come si crea un array?

Così:

array [keys] = valore

è anche possibile creare (dichiarare) un array usando declare -a:

declare -a nome_array

Una cosa alla volta.

Immaginiamo di esserci trasferiti in una città lontana da casa per partecipare ad un concorso. Si sono fatte le otto di sera e abbiamo una fame tremenda. Cosa facciamo? Ovvio, andiamo al ristorante. Per nostra fortuna/sfortuna però capitiamo in un locale alquanto strano; su ogni tavolo c'è un computer e ognuno di esso è collegato al pc che tengono in cucina. E' facile capire che in questo ristorante non ci sono camerieri e che le ordinazioni bisogna farle tramite il computer. Accendiamo il pc e cosa troviamo installato come sistema operativo? Linux, ovvio! Sulla scrivania notiamo in tutta evidenza l'unico file di testo presente. Lo apriamo e troviamo scritte le istruzioni per ordinare la cena. Insomma, per poter mangiare bisogna conoscere gli arrays in bash! E ti pareva...

Una vera selezione naturale, mangiano solo i pinguini :)) Ma nemmeno tutti, solo quelli che conoscono bash!!!

Come la ordiniamo 'sta cena?

Ci sono due metodi:

Il primo.

Apriamo un terminale e digitiamo

 cena[0]='antipasto'

e premiamo invio...e così per le altre pietanze: digitiamo e premiamo invio

 cena[1]='pasta e tonno'
 cena[2]='insalata di mare'
 cena[3]='ananas'



Ora ci chiediamo, quale sintassi deve utilizzare il cuoco per sapere quello che abbiamo ordinato?

Anzitutto controlla se abbiamo ordinato l'antipasto. Perciò digiterà

 echo ${cena[0]}

Poi controlla cosa abbiamo ordinato per primo

echo ${cena[1]}

Vuole sapere cosa abbiamo ordinato per frutta:

echo ${cena[3]}

E via dicendo...

Passiamo al secondo metodo.

Apriamo un terminale e scriviamo:

declare -a cena=('antipasto' 'pasta e tonno' 'insalata di mare' 'ananas')

In questo caso, a differenza dell'esempio precedente, abbiamo assegnato tutte le pietanze (valori) in un colpo solo.

Tenete presente una cosa, si parte sempre da zero. Perciò la prima pietanza ha indice 0, la seconda 1 e via dicendo.

Il nostro cuoco per conoscere ciò che abbiamo ordinato farà come abbiamo scritto sopra.

Per l'antipasto digiterà

echo ${cena[0]}

Per conoscere il secondo,

echo ${cena[2]}

E così via.

Ma mica è fesso il nostro cuoco!! Lui vorrà vedere la nostra cena al completo. Perciò digiterà:

echo ${cena[@]}

Per conoscere invece il numero complessivo delle pietanze

echo ${#cena[@]}

Trattandosi di un ristorante per linari, ai clienti è lasciata la possibilità di scelta, in ogni momento.

Perciò qualora volessimo,

  • potremmo aggiungere alla nostra cena anche il dolce e il caffè:
 cena=("${cena[@]}" "dolce" "caffè")

  • Potremmo sostituire l'antipasto con un'aranciata:
echo ${cena[@]/antipasto/aranciata}

  • Potremmo eliminare una pietanza; In questi casi si elimina sempre la frutta, perciò:
unset cena[3]

Controlliamo se la frutta è andata via realmente:

echo ${cena[3]}
Per il momento buona digestione. :)

Abbiamo così fatto una sommaria introduzione agli arrays in bash. Ora al caro Lightuono spetterà l'arduo compito di creare una serie di script usando gli arrays. Prossimamente sul suo blog.

L'indice del progetto lo trovate qui.

Alla prossima! 

2 commenti:

  1. Bel lavoro ragazzi complimenti,è tutto il giorno che leggo la guida e provo a far qualcosa...molto chiari,precisi e simpatici... ho salvato il vostro blog :) ora mi avrete sempre tra le scatole (sopratutto in python ) :p
    by Venom

    RispondiElimina
    Risposte
    1. Python? Qualcuno ha detto Python?
      Benvenuto anche nome dei titolari; io sono solo uno stagista qui ;-)

      Elimina