Creare uno script
Uno script è un file di testo che viene eseguito dalla bash; al suo interno, contiene una sequenza di comandi che vengono eseguiti, esattamente (o quasi) come se fossero stati digitati in un terminale.
Sequenze di istruzioni
Possiamo iniziare da un esempio semplice: creiamo uno script che prima scriva il nostro nome utente, e poi la data corrente.
mioscript.sh
con il seguente
contenuto:
#!/bin/bash echo "L'utente corrente è $USER" date
/bin/bash
, che è la shell corrente. A questo
punto, si potrebbe provare ad eseguire lo script semplicemente
digitando nel terminale
$ ./mioscript.shTuttavia, questo comando restituirebbe un errore, perché non abbiamo dato al nostro script i permessi di esecuzione. Dobbiamo dunque usare il comando chmod, che avevamo visto nelle scorse lezioni, per ovviare a questo problema:
$ chmod a+x ./mioscript.sh
$HOME
).
Variabili
Come si è già visto nella sessione interattiva, anche all'interno di uno script è possibile memorizzare delle variabili. Per assegnare un valore, è sufficiente scrivere un'istruzione del tipo:
MIAVAR="a b c"Conviene ricordare sempre che l'uso delle virgolette doppie permette di espandere automaticamente le variabili, mentre quello degli apici singoli le lascia inalterate.
Ad esempio, se impostiamo le variabili
$ MIAVAR="La mia home è $HOME" $ MIAVAR2='La mia home è $HOME'la prima conterrà il percorso alla propria home directory, mentre la seconda conterrà la stringa
$HOME
.
Per leggere una variabile chiedendola all'utente, è possibile utilizzare
il comando read
, come segue:
read MIAVAR
Esistono alcune variabili speciali che memorizzano gli argomenti passati ad uno script. In particolare:
- La variabile
$*
contiene tutti gli argomenti che sono stati passati allo script - Le variabili
$1, $2, ...
contengono gli argomenti passati allo script, in base alla posizione.
echo $2stamperà il secondo argomento passato allo script, oppure una stringa vuota nel caso questo non sia stato specificato. La variabile
$0
contiene sempre il nome dello script, come è stato
chiamato dall'utente.
myscript.sh
che prenda due argomenti:
- Un file sorgente
- Il nome di un file di destinazione da creare (o da sovrascrivere).
awk
dentro allo script).
Salvare l'output di un comando
Spesso può essere utile salvare in una variabile l'output di un comando, invece che farlo vedere all'utente. Questo si può ottenere in uno script bash con la seguente sintassi:
OUTPUT=$(miocomando)dove
OUTPUT
è il nome di una qualunque variabile dove
salvare il risultato, e miocomando
il comando che si
desidera eseguire. Una sintassi alternativa è la seguente:
OUTPUT=`miocomando`
Anno corrente: 2020 Mese corrente: NovembreSuggerimento: Si utilizzi il comando
date
per estrarre queste informazioni. Nel caso il computer abbia la lingua
settata in inglese, stampare il nome del mese come viene restituito da
date
, e non preoccuparsi di tradurlo in italiano.Funzioni e operazioni aritmetiche
Quando uno script diventa sufficientemente lungo, è possibile suddividerlo
in funzioni. Una funzione si definisce con la seguente sintassi (si noti
anche i commenti, che si inseriscono con il simbolo #
):
#!/bin/bash function myfun { echo $1 # La sintassi per gli argomenti è le stessa del programma principale } # Questo programma stampa "ciao" myfun "ciao"Come visibile nell'esempio, chiamare le funzioni è sintatticamente equivalente a chiamare un comando.
Un'altra caratteristica spesso utile è quella di effettuare operazioni
aritmetiche. Bash ha un supporto minimale per alcune operazioni, tramite
la sintassi $(( ))
. Ad esempio:
#/bin/bash A=1 B=$(($A + 1)) echo $B # Stampa 2Per operazioni più complicate, si può utilizzare il comando
bc
e salvare l'output con la sintassi $(echo "2+3" | bc)
.
Importare altri file
Se si ha bisogno di molte funzioni, oppure si vogliono semplicemente condividere alcune di queste fra più script, si possono inserire in un file separato e importare con il comando
source altrofile.sh
wc
). Si provi a
strutturare il codice con delle funzioni.