Ho già parlato diverse volte di Linux in questo blog. Ma non ho mai approfondito uno degli aspetti più belli di questo sistema, almeno per noi smanettoni. Sto parlando di Bash, il cosiddetto “terminale”. Bash è l’acronimo di Bourne Again SHell ed è una shell di testo del progetto GNU, utilizzata in tutti i sistemi UNIX e UNIX-like (quindi anche in Linux) fin dal 1989. Sebbene gli ambienti grafici delle varie distro Linux siano arrivati ad essere estremamente user-friendly, la shell rappresenta ancora una pietra angolare nello sviluppo di applicazioni per il sistema, nonché nella manutenzione. Attraverso un file shell infatti è possibile scrivere vere e proprie applicazioni testuali per la gestione delle risorse del computer, per la manutenzione ordinaria del sistema, per la creazione di routine e anche per giocare (con molta fantasia).

Altri articoli che potrebbero interessarti:

Bash: come scrivere script

Se siete abbastanza creativi, potrete creare applicazioni sorprendentemente personalizzate, su cui impostare di tutto e con cui controllare tutto: dal vostro computer a tutte le periferiche collegate. Per creare uno script con Bash è sufficiente un editor di testo. Sebbene non sia richiesto un software particolare, in quanto lo script non necessita di un compilatore, io vi consiglio di usare un editor arricchito, in grado cioè di colorare il testo a seconda del linguaggio che state utilizzando. Qualcosa di leggero e preinstallato come VIm o EMACS, senza necessariamente scaricare Visual Studio Code (anche se quest’ultimo è il più completo, anche per lavorare su altri linguaggi).

Una volta scelto l’editor e aperto un nuovo file, la prima cosa da fare per dire all’interprete del sistema che stiamo usando Bash è scrivere la riga

#!/bin/bash

Questa riga è obbligatoria, altrimenti l’interprete non capirà di avere a che fare con uno script, ma leggerà il file come un comune file di testo. I caratteri #! dicono al computer di avere a che fare con uno script, mentre /bin/bash è il percorso dove andare a prendere l’interprete dei comandi. Le righe successive saranno riempite con le istruzioni dello script che vogliamo realizzare. Una volta finito, bisogna salvare il file con l’estensione .sh, ad esempio “script.sh” e dire al sistema che quel file è un eseguibile. Per farlo, bastsa digitare al prompt dei comandi:

chmod +x script.sh

Il comando chmod è un comando di sistema di Linux che istruisce il computer sugli attributi dei file. Gli attributi sono tre: r, w e x. L’attributo x indica che il file è un eseguibile. Quindi +x aggiunge letteralmente l’attributo eseguibile al file.

Esempi di Script

Abbiamo eseguito diverse operazioni sul nostro computer e ora abbiamo la memoria un po’ intasata e disordinata. Il sistema ha generato diversi file temporanei e bisogna liberarsene. Vogliamo quindi creare uno script per eliminare tutti i file temporanei di Linux. È molto semplice. Apriamo un editor di testo e creiamo un nuovo file. Al suo interno scriviamo:

#!/bin/bash
cd /var/tmp
rm -rf *

Salviamo il file e chiamiamolo remove-temp.sh. Ora diciamo a Linux che questo file è un eseguibile:

chmod +x remove-temp.sh

Abbiamo fatto. A questo punto, per eseguire il programma mi basta accedere al terminale e digitare

./remove-temp.sh

Mettendo ./ davanti al nome di un eseguibile, stiamo dicendo al sistema di eseguire quel file. Attenzione però, il file deve avere l’attributo x. Per controllare se tale attributo è stato legato al file basta scrivere

ls -l remove-temp.sh

Se nella riga che esce fuori, compare la lettera x tra gli attributi del file, allora esso è un eseguibile.

Come abbiamo visto, per programmare uno script Bash non bisogna imparare un nuovo linguaggio di programmazione. La shell è l’interprete dei comandi di Linux, quindi uno script contiene una sequenza di istruzioni di sistema. Se qualcuno di voi è mio coetaneo (o giù di lì), si ricorderà di quando, ai tempi, cambiavamo le configurazioni di sistema andando a modificare i file AUTOEXEC.BAT e CONFIG.SYS, o quando creavamo i file .BAT con all’interno una serie di istruzioni per il DOS, allo scopo di alleggerirci il lavoro. Ecco, Bash è esattamente la stessa cosa.

Programmiamo in Bash: le Variabili

“Ma come Roberto, avevi detto che Bash non è un linguaggio di programmazione e ora ci parli delle variabili?”. È vero, ho detto che Bash non è un linguaggio di programmazione, ma di scripting. Ma anche uno script, come i linguaggi di programmazione, ha le variabili, i cicli e le strutture condizionali. Del resto, anche JavaScript è un linguaggio di script (come suggerisce il nome).

Una Variabile in Bash è un contenitore a cui possiamo attribuire un qualsiasi tipo di valore. Possiamo inserirci un numero, il risultato di un calcolo, una stringa, un comando o qualunque cosa. In Bash, per indicare che ci stiamo riferendo a una variabile abbiamo due metodi: uno per l’assegnazione e uno per il riferimento. Per assegnare la variabile useremo il simbolo =, mentre per richiamarla, faremo riferimento con il simbolo $, seguito dal nome della variabile. Esempio:

#!/bin/bash
a = “Ciao”
b = $a
echo $b

Lo script sopra riportato stamperà a schermo la parola “Ciao”. L’istruzione echo infatti, manda a schermo tutto ciò che inseriamo successivamente, nella stessa riga.

Bash: le strutture condizionali

Anche Bash, come JavaScript, supporta le strutture condizionali. L’impianto è anche molto simile. Le istruzioni di base sono if/then/else per le condizioni che si verifichino una sola volta.

#!/bin/bash
a = 10
b = 23
if [“$a” = “$b”]; then
echo “Le due variabili sono uguali”; else
echo “Le due variabili non sono uguali”
fi

Notate bene l’ultima riga: fi, ovvero if al contrario. È l’istruzione che indica la fine del blocco condizionale.

Bash: i cicli

I cicli in bash sono di due tipi:  while/do/elsefor/do. Ve li illustro con due esempi.

Vogliamo creare ora uno script che si metta in background e cancelli i file temporanei ogni ora. L’ unità di misura del tempo è il secondo, quindi il controllo verrà effettuato ogni 3600 secondi. Lo script sarà attivo finché non lo si chiuderà manualmente, quindi tra le prime istruzioni inseriamo “while true”.

#!/bin/bash
while true; do
rm -rf /var/tmp/*
sleep 3600
done

Come if, anche while richiede un’istruzione di chiusura. In questo caso si utilizza done.

Per testare il ciclo for invece, creiamo uno script che semplicemente conti fino a 10. Per farlo assegneremo alla variabile “a” i valori da 1 a 10 e diremo al computer di mostrarceli man mano. In questo caso “a” diventa una specie di Array. Vediamo il codice:

#!/bin/bash
for a in 1 2 3 4 5 6 7 8 9 10; do

echo $a
done

oppure;

#!/bin/bash
for a in {1..10}; do

echo $a
done

oppure, con la notazione simile a quella utilizzata in C, JavaScript e altri linguaggi;

#!/bin/bash
for ((a=1; a = 10; a+=1)); do

echo $a
done

Un altro ciclo, simile al while per funzionamento, ma nel senso inverso è until, la cui sintassi è until/do. A differenza di while infatti, il ciclo until esegue le istruzioni fintantoché la condizione specificata è falsa. Per esempio, se vogliamo attendere la creazione del file “file.txt”, potremmo utilizzare il seguente script:

#!/bin/bash
until [[ -e file.txt ]] ; do

sleep 10 # attendi tre secondi
done

Conclusioni: commenti, fine linea e modi alternativi di scrivere il codice

Avrete notato che in questo ultimo script ho usato il simbolo #, non per indicare l’interprete /bin/bash, ma per un commento. In Bash i commenti si indicano con #e, come detto per JavaScript, servono a descrivere la funzione che si sta andando ad eseguire. I lettori più attenti, avranno anche notato che a fine riga non ho mai utilizzato il punto e virgola, sebbene lo abbia utilizzato in alcune espressioni. Questo perché in Bash il punto e virgola si utilizza solo se si vogliono scrivere più istruzioni nella stessa riga. Il ciclo qui sopra poteva anche essere scritto

#!/bin/bash
until [[ -e file.txt ]]
do

sleep 10 # attendi tre secondi
done

Ti è piaciuto questo articolo su Bash?  Resta sintonizzato per seguire gli altri articoli della serie! Contattami su Facebook o su Twitter e parliamone insieme! E se non vuoi perderti gli aggiornamenti del blog, iscriviti al canale Telegram!  Ah, ti ricordo che io scrivo anche per i blog di Stolas Informatica e Satyrnet, occupandomi principalmente, almeno in questo periodo, di sicurezza informatica, ma non solo. Facci un salto!

 

 

Facebook Comments