Appendice B. Tabelle di riferimento

Le seguenti tabelle rappresentano un utile riepilogo di alcuni concetti dello scripting. Nella parte precedente del libro questi argomenti sono stati trattati più approfonditamente, con esempi sul loro impiego.

Tabella B-1. Variabili speciali di shell

VariabileSignificato
$0Nome dello script
$1Parametro posizionale nr.1
$2 - $9Parametri posizionali nr.2 - nr.9
${10}Parametro posizionale nr.10
$#Numero dei parametri posizionali
"$*"Tutti i parametri posizionali (come parola singola) *
"$@"Tutti i parametri posizionali (come stringhe separate)
${#*}Numero dei parametri passati allo script da riga di comando
${#@}Numero dei parametri passati allo script da riga di comando
$?Valore di ritorno
$$ID di processo (PID) dello script
$-Opzioni passate allo script (usando set)
$_Ultimo argomento del comando precedente
$!ID di processo (PID) dell'ultimo job eseguito in background

* È necessario il quoting, altrimenti viene trattato come "$@".

Tabella B-2. Operatori di verifica: confronti binari

OperatoreSignificato-----OperatoreSignificato
     
Confronto aritmetico  Confronto letterale 
-eqUguale a =Uguale a
   ==Uguale a
-neNon uguale a !=Non uguale a
-ltMinore di \<Minore di (ASCII) *
-leMinore di o uguale a   
-gtMaggiore di \>Maggiore di (ASCII) *
-geMaggiore di o uguale a   
   -zLa stringa è vuota
   -nLa stringa non è vuota
     
Confronto aritmeticotra parentesi doppie (( ... ))   
>Maggiore di   
>=Maggiore di o uguale a   
<Minore di   
<=Minore di o uguale a   

* Se si usa il costrutto doppie parentesi quadre [[ ... ]] , allora non è necessario il carattere di escape \ .

Tabella B-3. Operatori di verifica: file

OperatoreVerifica se-----OperatoreVerifica se
-eIl file esiste -sIl file non è vuoto
-fIl file è un file regolare   
-dIl file è una directory -rIl file ha il permesso di lettura
-hIl file è un link simbolico -wIl file ha il permesso di scrittura
-LIl file è un link simbolico -xIl file ha il permesso di esecuzione
-bIl file è un dispositivo a blocchi   
-cIl file è un dispositivo a caratteri -gÈ impostato il bit sgid
-pIl file è una pipe -uÈ impostato il bit suid
-SIl file è un socket -kÈ impostato lo "sticky bit"
-tIl file è associato a un terminale   
     
-NIl file è stato modificato dall'ultima lettura F1 -nt F2Il file F1 è più recente di F2 *
-OSi è il proprietario del file F1 -ot F2Il file F1 è più vecchio di F2 *
-GL'id di gruppo del file è uguale al vostro F1 -ef F2I file F1 e F2 sono degli hard link allo stesso file *
     
!"NOT" (inverte il senso delle precedenti verifiche)   

* Operatore binario (richiede due operandi).

Tabella B-4. Sostituzione ed espansione di parametro

EspressioneSignificato
${var}Valore di var, uguale a $var
  
${var-DEFAULT}Se var non è impostata, valuta l'espressione al valore di $DEFAULT *
${var:-DEFAULT}Se var non è impostata o è vuota, valuta l'espressione al valore di $DEFAULT *
  
${var=DEFAULT}Se var non è impostata, l'espressione è valutata al valore di $DEFAULT *
${var:=DEFAULT}Se var non è impostata, l'espressione è valutata al valore di $DEFAULT *
  
${var+ALTRO}Se var è impostata, l'espressione è valutata al valore di $ALTRO, altrimenti a stringa nulla
${var:+ALTRO}Se var è impostata, l'espressione è valutata al valore di $ALTRO, altrimenti a stringa nulla
  
${var?MSG_ERR}Se var non è impostata, visualizza $MSG_ERR *
${var:?MSG_ERR}Se var non è impostata, visualizza $MSG_ERR *
  
${!varprefix*}Verifica tutte le variabili dichiarate precedentemente i cui nomi iniziano con varprefix
${!varprefix@}Verifica tutte le variabili dichiarate precedentemente i cui nomi iniziano con varprefix

* Naturalmente se var è impostata, l'espressione viene valutata al valore di $var.

Tabella B-5. Operazioni su stringhe

EspressioneSignificato
${#stringa}Lunghezza di $stringa
  
${stringa:posizione}Estrae una sottostringa da $stringa iniziando da $posizione
${stringa:posizione:lunghezza}Estrae una sottostringa di $lunghezza caratteri da $stringa iniziando da $posizione
  
${stringa#sottostringa}Toglie l'occorrenza più breve di $sottostringa dalla parte iniziale di $stringa
${stringa##sottostringa}Toglie l'occorrenza più lunga di $sottostringa dalla parte iniziale di $stringa
${stringa%sottostringa}Toglie l'occorrenza più breve di $sottostringa dalla parte finale di $stringa
${stringa%%sottostringa}Toglie l'occorrenza più lunga di $sottostringa dalla parte finale di $stringa
  
${stringa/sottostringa/sostituto}Sostituisce la prima occorrenza di $sottostringa con $sostituto
${stringa//sottostringa/sostituto}Sostituisce tutte le occorrenze di $sottostringa con $sostituto
${stringa/#sottostringa/sostituto}Se $sottostringa viene verificata nella parte iniziale di $stringa, allora $sottostringa viene sostituita con $sostituto
${stringa/%sottostringa/sostituto}Se $sottostringa viene verificata nella parte finale di $stringa, allora $sottostringa viene sostituita con $sostituto
  
  
expr match "$stringa" '$sottostringa'Lunghezza di $sottostringa* verificata nella parte iniziale di $stringa
expr "$stringa" : '$sottostringa'Lunghezza di $sottostringa* verificata nella parte iniziale di $stringa
expr index "$stringa" $sottostringaPosizione numerica in $stringa del primo carattere verificato compreso in $sottostringa
expr substr $stringa $posizione $lunghezzaEstrae $lunghezza caratteri da $stringa iniziando da $posizione
expr match "$stringa" '\($sottostringa\)'Estrae $sottostringa* dalla parte iniziale di $stringa
expr "$stringa" : '\($sottostringa\)'Estrae $sottostringa* dalla parte iniziale di $stringa
expr match "$stringa" '.*\($sottostringa\)'Estrae $sottostringa* dalla parte finale di $stringa
expr "$stringa" : '.*\($sottostringa\)'Estrae $sottostringa* dalla parte finale di $stringa

* Dove $sottostringa è un'espressione regolare.

Tabella B-6. Costrutti vari

EspressioneInterpretazione
  
Parentesi quadre 
if [ CONDIZIONE ]Costrutto di verifica
if [[ CONDIZIONE ]]Costrutto di verifica esteso
Array[1]=elemento1Inizializzazione di array
[a-z]Intervallo di caratteri in un'Espressione Regolare
  
Parentesi graffe 
${variabile}Sostituzione di parametro
${!variabile}Referenziazione indiretta di variabile
{ comando1; comando2; . . . comandoN;}Blocco di codice
{stringa1,stringa2,stringa3,...}Espansione multipla
{a..z}Espansione multipla estesa
{}Sostituzione di testo dopo find e xargs
  
  
Parentesi 
( comando1; comando2 )Gruppo di comandi eseguiti in una subshell
Array=(elemento1 elemento2 elemento3)Inizializzazione di array
risultato=$(COMANDO)Esegue il comando in una subshell e assegna il risultato alla variabile
>(COMANDO)Sostituzione di processo
<(COMANDO)Sostituzione di processo
  
Doppie parentesi 
(( var = 78 ))Aritmetica di interi
var=$(( 20 + 5 ))Aritmetica di interi con assegnamento di variabile
  
Quoting 
"$variabile"Quoting "debole"
'stringa'Quoting "forte"
  
Apici inversi 
risultato=`COMANDO`Esegue il comando in una subshell e assegna il risultato alla variabile