Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
---|---|---|
Indietro | Avanti |
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
Variabile | Significato |
---|---|
$0 | Nome dello script |
$1 | Parametro posizionale nr.1 |
$2 - $9 | Parametri 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
Operatore | Significato | ----- | Operatore | Significato |
---|---|---|---|---|
Confronto aritmetico | Confronto letterale | |||
-eq | Uguale a | = | Uguale a | |
== | Uguale a | |||
-ne | Non uguale a | != | Non uguale a | |
-lt | Minore di | \< | Minore di (ASCII) * | |
-le | Minore di o uguale a | |||
-gt | Maggiore di | \> | Maggiore di (ASCII) * | |
-ge | Maggiore di o uguale a | |||
-z | La stringa è vuota | |||
-n | La stringa non è vuota | |||
Confronto aritmetico | tra 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
Operatore | Verifica se | ----- | Operatore | Verifica se |
---|---|---|---|---|
-e | Il file esiste | -s | Il file non è vuoto | |
-f | Il file è un file regolare | |||
-d | Il file è una directory | -r | Il file ha il permesso di lettura | |
-h | Il file è un link simbolico | -w | Il file ha il permesso di scrittura | |
-L | Il file è un link simbolico | -x | Il file ha il permesso di esecuzione | |
-b | Il file è un dispositivo a blocchi | |||
-c | Il file è un dispositivo a caratteri | -g | È impostato il bit sgid | |
-p | Il file è una pipe | -u | È impostato il bit suid | |
-S | Il file è un socket | -k | È impostato lo "sticky bit" | |
-t | Il file è associato a un terminale | |||
-N | Il file è stato modificato dall'ultima lettura | F1 -nt F2 | Il file F1 è più recente di F2 * | |
-O | Si è il proprietario del file | F1 -ot F2 | Il file F1 è più vecchio di F2 * | |
-G | L'id di gruppo del file è uguale al vostro | F1 -ef F2 | I 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
Espressione | Significato |
---|---|
${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
Espressione | Significato |
---|---|
${#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" $sottostringa | Posizione numerica in $stringa
del primo carattere verificato compreso in $sottostringa
|
expr substr $stringa $posizione
$lunghezza | Estrae $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
Espressione | Interpretazione |
---|---|
Parentesi quadre | |
if [ CONDIZIONE ] | Costrutto di verifica |
if [[ CONDIZIONE ]] | Costrutto di verifica esteso |
Array[1]=elemento1 | Inizializzazione 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 |