lunedì 17 ottobre 2011

FORever! :)

Con il post teorico di oggi, apriamo un nuovo capitolo del "Progetto Bash."

Introduciamo, dopo esserci soffermati per molto tempo sui costrutti condizionali, i cicli.
La nostra shell, bash appunto, mette a disposizioni tre tipi di cicli:
for
while
until

Sicuramente in molti vi state chiedendo come mai il post di oggi non si svolge sotto forma di intervista come il precedente. Ebbene, ho deciso di scrivere il post alle 3 di notte.

E, a quell'ora, non potevo mica chiamare il caro Light per intervistarlo!!!! Portate pazienza! :)

Iniziamo da For.

Secondo tradizione consalidata, quando si affronta un nuovo argomento si spiattella sin da subito la sintassi.

Sinceramente io non sarei molto d'accordo su questo modo di procedere. Propenderei più per un metodo induttivo: dal particolare all'universale; ma basta sfogliare qualsiasi manuale, o addirittura i nostri favolosi (si fa per dire) man, che ci si scontra col fatidico metodo deduttivo (il contrario del metodo induttivo) :D

Piegamoci alla tradizione!!!

Ecco la sintassi di for

for NOME [in LISTA]; do COMANDI; done

E' possibile mettere tutta la sintassi su una sola riga grazie ai separatori ";"

Ma, in realtà, per ragioni puramente estetiche, la troveremo scritta così:

for NOME in [LISTA]
do
    COMANDI
done


L'elemento NOME, che per una sorta di tacita convenzione è chiamato quasi sempre "i", è una variabile vuota.
Questa variabile (vuota) è destinata ad essere definita, cioè è destinata a riempirsi di contenuto.

Di quale contenuto stiamo parlando?

Scusatemi sin d'ora per il mio linguaggio volutamente terra terra.

Immaginiamo che la variabile "i" sia un secchio vuoto, che la LISTA sia  della sabbia e, infine, ciò che chiamiamo "COMANDI" sia una bitoniera.

Il compito di for, in questo caso, è quello di riempire la cardarella di sabbia e andarla a scaricare nella bitoniera.

La cosa che ci interessa è che la cardarella vuota, che è la nostra variabile, si riempie di volta in volta di contenuto, di sabbia appunto.

Capito questo ragionamento possiamo iniziare ad usare una terminologia un pò più consona al nostro discorso.

Il ciclo di for assegna alla variabile "i" tanti valori quanti sono gli elementi presenti nella LISTA.

Se nella lista ci stanno 5 elementi, ad es, 5 file di testo, avremo: i=testo1; i=testo2; i=testo3; i=testo4 I=testo5. Chiaro?

Passiamo ora alla nostra bitoniera. Volevo dire al nostro comando. :)

Una volta che è avvenuta la definizione della variabile, questa viene data in pasto al comando, o ai comandi, che possono essere della natura più varia.

Diventerà tutto più chiaro, qualora ancora non lo sia, con un esempio.

Costruiamo un script.

#!/bin/bash

for i in Giovanni Pasquale Antonio Ennio Michele Luigi bit3lux
do
     echo $i
done

exit0


In questo caso il comando è echo che, come sappiamo, stamperà a video tutto ciò che gli passiamo.

Domanda: ma cosa stiamo dando in pasto al comando echo?

A parte il fatto che ormai dovrebbe essere chiaro quale sia la risposta, ma per essere ancora più sicuri, non ci resta che lanciare lo script.

Questa volta, ma solo per questa volta, mi ripeto:

aprite un file di testo sulla scrivania, incollateci il corpo dello script, nominatelo prova.sh

spostiamoci, col terminale, sulla scrivania

cd Scrivania

rendiamo eseguibile lo script

chmod +x prova.sh

lanciamo lo script

./prova.sh

Ecco il risultato:

Giovanni
Pasquale
Antonio
Ennio
Michele
Luigi
bit3lux

E' accaduto questo:

La variabile "i" si è riempito dei veri "contenuti" presenti nella lista.

Così:

i=Giovanni, i=Pasquale, i=Antonio, i=Ennio, i=Michele, i=Luigi, i=Bit3Lux

Poi è stata data in pasto al comando "echo" e questi ne ha stampato a video i "contenuti". E' chiaro ora? :D

Alla prossima

Io e Lightuono

P.S.1 Ricordo che l'intento sotteso al "Progetto Bash" è quello di trattare di programmazione bash in maniera semplice.
P.S.2 Per avere un quadro d'insieme del Progetto, vi consiglio di consultare l'indice (qui)
P.S.3 Vi ricordo, infine, che ad ogni parte teorica ne corrisponde una pratica, curata dal caro Lightuono.


Nessun commento:

Posta un commento