Nonostante le distribuzioni Linux siano sempre più facili da usare, capita a volte di dover ricorrere alla shell e qui l’utente medio si ferma e dice che Linux è un sistema per esperti. In questo articolo parlerò della programmazione della shell che in un mondo come quello del pinguino serve sempre.
Ci sono vari tipi di shell, qui parleremo della sh ( Bourme Shell ) da cui poi si è evoluta la bash, che è forse la più utilizzata oggi. In Linux un file è eseguibile quando ha determinati bit settati e non dall’estensione, per rendere esguibile un file occorre usare il comando:
chmod +x nomefile
però va eseguito con ./nomefile a meno che non si metta in path:
export path = $path:/directory/filename
con export difatti si esporta la variabile generale path senza scriverla nei file di avvio e vale solo nella finestra della shell corrente.
I commenti sono come quelli del C con // o /* */, mentre le variabili hanno il funzionamento di quelli di php con il $ davanti ( $totale ) per il valore, mentre senza niente per l’assegnazione ( totale = 10 ). Ci sono variabili speciali come $1 – $2 … che non sono altro che gli argomenti della riga di comando, il primo, il secondo e così via. I comandi della shell si scrivono tali e quali, per esempio se scriviamo
cp -i $1 $2
copierà il primo sul secondo parametro della riga di comando. Alcuni caratteri hanno valore speciale per la shell e vanno usati con attenzione, ad esempio se scrivo
vi * editerò tutti i files della directory corrente, mentre con vi \* si aprirà solo il file di nome *
in gergo si chiama fare il quoting di un carattere speciale. Ma vediamo alcuni esempi pratici della programmazione della shell:
#/bin/sh
eta = 24
echo ‘La mia età è’ $eta
questo programmino scrive sulla shell “la mia età è 24” in quanto echo è il comando per scrivere. Le stringhe costanti vanno tra apici.
#/bin/sh
a=5
b=8
tot=$a+$b
if $tot > 10 -a $tot < 20 then
echo $tot
fi
questo invece scrive il totale della somma solo se il valore è compreso tra 11 e 19. Gli operatori logici sono -a ( AND ) -o ( OR ) ! ( NOT ).
Come in altri linguaggi esiste if … else … fi ricordarsi sempre di chiudere if con fi! Esiste anche while do … done e poi anche il ciclo for di cui riporto un esempio, scrivere i numeri da 1 a 10.
#!/bin/sh
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
done
Per il debug si usa la echo e si fa output dei valori delle variabili su shell, magari con la riga corrente per sapere dove sta l’errore, perchè si possono scrivere dei veri e propri programmi con la shell, usate il comando less su qualche file di avvio e vi renderete conto di quello che vuol dire! Abbiamo visto come la Bourme Shell possa essere usata per programmare, non certo al livello del C o Perl o Java, ma comunque può essere adatta per alcuni compiti, come ad esempio compilare al volo i pacchetti sorgenti di una distribuzione come ArchLinux.