Controllo del flusso in Shell Programming

postato in: Articoli | 0

Episodio4

Nel post di oggi parleremo di nuovo di Shell Programming. Negli scorsi episodi abbiamo imparato un po’ di aritmetica della bash e abbiamo anche capito che cosa sono le Wild Cards.
In questo episodio, invece ci occuperemo di controllare il flusso di esecuzione del codice e delle operazioni sui file.

 

 

COSA SONO I CONTROLLORI DI FLUSSO
Sono tutte quelle strutture che permettono di deviare il normale percorso di esecuzione, esattamente come l’acqua nei tubi è deviata dal suo percorso da vari elementi come i rubinetti e i .
Questi costrutti sono tre:

  • if e if then else
  • while
  • for

Cominciamo quindi subito con il primo controllore di flusso.

 

 

IF E IF THEN ELSE
L’if è il costrutto che permette le decisioni binarie. Provvede alla scelta confrontando due o più variabili. La sua sintassi è:

if [ <var1> <condizione> <var2> ]; then
 /*codice da eseguire se a condizione è vera*/
 else
 /*Codice da eseguire se la condizione è falsa*/
 fi

 

Ora, la sintassi non è difficile. Si deve solo prestare attenzione agli spazi.
Incominciamo dall’inizio.

<var1> e <var2> (ovviamente senza diamanti <>) sono le variabili da confrontare.
Il costrutto <condizione> è, in parole povere il modo di confrontare le due variabili. Sono delle sigle che fanno per lo più operazioni logiche. Vediamo le principali:

  • -gt : maggiore.
  • -lt : minore.
  • -ge : maggiore o uguale.
  • -le : minore uguale.
  • -eq : uguale.
  • -ne : diverso.

Applicate in modo opportuno permettono di decidere quale ramo, se quello del vero o quello del falso, eseguire.
Ovviamente vi è la possibilità di concatenare varie di queste espressioni grazie a:

  • || : or logico.
  • && : and logico.
 eta=20;
 if[ $eta -ge 18 ]; then
 echo “Hai più di 18 anni, puoi entrare”
 else
 echo “Non hai l’età per entrare”
 fi

Ovviamente se non abbiamo bisogno del ramo false, terminiamo il ramo true con il costrutto fi.

 

 

WHILE
Il while è il responsabile del ciclo. Permette, finchè la condizione è vera, di eseguire il codice all’interno del suo ramo. La sintassi è:

while [ <var1> <condizione> <var2> ];
 do
 /*Codice da eseguire se la condizione è vera*/
 done

Al posto di <condizione> possiamo inserire una delle condizioni logiche che abbiamo incontrato in precedenza.

 

 

FOR
La sintassi del for è:

for <variabile> in <range>
 do
 /*Codice da eseguire*/
 done

Questo costrutto è analogo al while, nel senso che permette di eseguire il codice all’interno del suo ramo per tutte le volte specificare nel suo <range>:

Esempio:

for file in /home/utente/Documenti/*
 do
 echo $file
 done

 

 

ATTENZIONE
Partiamo con il dire che nello Shell Scripting le variabili non hanno tipo, ossia la Bash, per esempio, somma numeri con numeri e numeri con caratteri, con il conseguente problema di dati non corretti. Sta quindi a noi il compito di inserire le giuste variabili nelle giuste operazioni.
In ogni caso possiamo distinguere due tipi di variabili:

  1. Quelle che contengono numeri;
  2. Quelle che contengono caratteri;

Per le prime ci affidiamo alle regole viste prima.
Per le seconde valgono i simboli matematici:

  • : maggiore.
  • : minore.
  • >= : maggiore o uguale.
  • <= : minore uguale.
  • == : uguale.
  • != : diverso.

 

 

LEGGERE L’INPUT DA TASTIERA
Per leggere l’input da tastiera si usa semplicemente il costrutto:

read <variabile>

Dove <variabile> conterrà l’input  letto da tastiera fino all’inserimento di un invio.

 


LAVORARE CON I FILE

Un grande utilizzo degli script è quello di analizzare sistematicamente grandi moli di file. Sfruttando pesantemente ciò che abbiamo detto in precedenza, possiamo fare contenere qualunque cosa alle nostre variabili. Compresi i file. Valgono le seguenti regole:

  • -f file : true se il file esiste;
  • -s file : true se il file non è vuoto;
  • -r file : true se il file è leggibile;
  • -w file : true se il file è scrivibile;
  • -x file : true se il file è eseguibile;
  • -d file : true se il file è una directory;
  • -h file : true se il file è un link simbolico;

Esempio:

for file in /home/utente/*
 do
 echo $file
 if [ -r $file ]; then
 echo "Si hanno i permessi di lettura."
 fi
 
 if [ -w $file ]; then
 echo "Si hanno i permessi di scrittura."
 fi

if [ -d $file ]; then
 echo "E' una directory."
 fi
 done

 

 

VARIABILI BUILD-IN
Sono delle variabili che sono proprie dello script che stiamo eseguendo. Sono molteplici. Le principali sono:

  • $* : Si riferisce a tutti gli argomenti da linea di comando del nostro script. Può dare problemi con gli spazi.
  • $@ : Analoga alla precedente ma gestisce correttamente gli spazi.
  • $# : Contiene il numero di argomenti da linea di comando dello script.

 

 

CONCLUSIONE
Abbiamo visto molte cose oggi. Non ci resta che provarle una a una.
Suggerimento: sfruttate le whild card!
Fateci sapere i risultati. A prossimo post 😉

 

Link alle puntate precedenti:

 

Fonti:

Dottore in Informatica. Appassionato di computer fin dal primo PC Olivetti con Windows 95 e la bellezza di 8 MB di RAM.
Utilizzatore Linux da 5 anni, credo profondamente nella filosofia open source.
Dopo tante distro provate sul mio fidato Toshiba, uso Fedora per lo studio e il divertimento.

Lascia un commento