Introduzione a Unix
Indietro | Capitolo 9 Programmazione di shell | Avanti

# 9.5 Sostituzione di parametri

Si può riferirsi ai parametri in modo astratto e sostituire i loro valori in base a delle condizioni, usando gli operatori definiti qui sotto. Ancora una volta si possono usare le parentesi graffe ({}) per isolare la variabile e il suo operatore.

`$`parametro`` | sostituisce questa stringa con il valore di `parametro`
`${`parametro`}` | come sopra. Le parentesi sono d'aiuto se non c'è separazione tra questo parametro e una stringa adiacente.
`$`parametro`=` | setta `parametro` a null.
`${`parametro`-`default`}` | se `parametro` non è settato allora si usa `default` come valore. `parametro` non viene resettato.
`${`parametro`=`default`}` | se `parametro` non è settato allora lo si setta a `default` e si usa il nuovo valore
`${`parametro`+`nuovo_valore`}` | se `parametro` è settato allora si usa `nuovo_valore` altrimenti non si usa nulla. `parametro` non viene resettato.
`${`parametro`?`messaggio`}` | se `parametro` non è settato allora si visualizza il messaggio. Se `parametro` è settato allora si usa il valore corrente.

Non ci sono spazi nei precedenti operatori. Se un due punti (:) viene inserito prima di -, =, + o ? allora si effettua prima un test per vedere se il parametro ha un settaggio non-nullo.

La shell C ha alcuni modi aggiuntivi per la sostituzione di parametri:

`$lista[`n`]` | seleziona l'`n-esima` parola dalla lista
`${lista[`n`]}` | come sopra
`$#lista` | riporta il numero di parole in lista
`$?`parametro`` | ritorna 1 se il parametro è settato, 0 altrimenti
`${?`parametro`}` | come sopra
`$<` | legge una linea da stdin(4)

Inoltre la shell C definisce l'array `$argv[`n`]` per contenere gli `n` argomenti della linea di comando e `$#argv` per il numero di argomenti, come specificato in Tabella 9.1.

Per illustrare alcune di queste caratteristiche si userà il seguente script di prova:

    #!/bin/sh
    param0=$0
    test -n "$1" && param1=$1
    test -n "$2" && param2=$2
    test -n "$3" && param3=$3
    echo 0: $param0
    echo "1: ${param1-1}: \c" ;echo $param1
    echo "2: ${param2=2}: \c" ;echo $param2
    echo "3: ${param3+3}: \c" ;echo $param3

Inizialmente nello script si verifica con test(1) se la variabile esiste; in tal caso si setta il parametro al suo valore. Dopo si riportano i valori, effettuando le sostituzioni.

Nella prima esecuzione dello script non vengono forniti argomenti:

    $ ./parameter.sh
    0: ./parameter.sh       # trova sempre $0
    1: 1:                   # sostituisce  1, ma non assegna questo valore
    2: 2: 2                 # sostituisce 2 e assegna questo valore
    3: :                    # non sostituisce

In questa seconda esecuzione dello script si forniscono alcuni argomenti:

    $ ./parameter one two three
    0: ./parameter.sh       # trova sempre $0
    1: one: one             # non sostituisce, ha già un valore
    2: two: two             # non sostituisce, ha già un valore
    3: 3: three             # sostituisce 3 ma non assegna questo valore

Indietro | Partenza | Avanti
Variabili | Risali | Here document

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.