Le variabili viste fino ad ora sono dette variabili locali, sono definite dal programmatore e cessano di esistere non appena termina lo script.
Altro tipo di variabili sono le cd. variabili di Shell, variabili automaticamente inizializzate all’avvio della shell che permettono di riferirsi agli argomenti su linea di comando.
Sono detti argomenti su linea di comando quegli argomenti passati al programma tramite, appunto, la lina di comando. Ad es.:
programma argomento1 argomento 2 ...
Ecco una tabellina riassuntiva di tali variabili:
$# | numero di argomenti su linea di comando |
$- | opzioni fornite alla shell |
$? | valore di uscita dell’ultimo comando eseguito |
$n | Recupera il valore di uno specifico argomento su linea di comando, dove n varia tra 1 e 9. $1 corrisponde al primo argomento da sinistra |
$0 | il nome del programma corrente |
$* | tutti gli argomenti su linea di comando (es. "1 2 3 4") |
$@ | tutti gli argomenti su linea di comando, ogniuno quotato separatamente (es. "1" "2" "3" "4") |
$$ | numero ID del processo corrente |
$! | numero ID del processo dell’ultimo comando messo in background |
Facciamo un esempio e creiamo uno script con il seguente contenuto:
#!/bin/sh
#Uso delle variabili di Shell
echo "Numero parametri = "$#
echo "Nome del Programma = "$0
echo "Tutti i Parametri = "$*
echo "Il parmentro n.1 = "$1
echo "Il parmentro n.3 = "$3
Ora salviamo come "disney.sh", settiamo i consueti permessi e richiamiamo il nostro file da linea di comando seguito da quattro parametri, in questo modo:
./disney.sh pippo pluto topolino paperino
L’output a video sarà:
Numero parametri = 4
Nome del Programma = disney.sh
Tutti i Parametri = pippo pluto topolino paperino
Il parmentro n.1 = pippo
Il parmentro n.3 = topolino
Per finire il nostro viaggio tra le variabili è necessario ricordarne un’altro gruppo, le cd. variabili d’ambiente caratterizzate dal fatto di conservare nel tempo il loro valore in quanto questo è pre-impostato. Non ritengo opportuno soffermarmi a lungo sull’argomento per il quale mi limito a riportarvi un semplice script di esempio che utilizza alcune tra le variabili in questione:
#!/bin/sh
#Uso delle variabili d'ambiente
echo "Informazioni sul sistema:"
echo -e "hostname: $HOSTNAME"
echo -e "hardware: $HOSTTYPE"
echo -e "OS: $OSTYPE"
echo "Informazioni sull'utente:"
echo -e "logname: $LOGNAME"
echo -e "homedir: $HOME"
echo -e "shell: $SHELL"
echo -e "path: $PATH"
Da notare che nell’esempio abbiamo utilizzato echo con l’opzione -e per abilitare l’interpretazione dei caratteri protetti con backslash.
Non mi resta che concludere ricordandovi di non settare variabili locali utilizzando denominazioni riservate alle variabili d’ambiente ed alle variabili di Shell.