Problemi in questa pagina? Segnalali in questa discussione
Introduzione
Prima di vedere nel dettaglio gli strumenti che le varie shell disponibili su Ubuntu forniscono per fare il parsing della riga di comando, è utile fare una breve introduzione per capire alcuni concetti fondamentali.
Facendo riferimento al comando tar, un modo generico per lanciare questo comando nel terminale è dato da:
tar -cv -f mioArchivio.tar directoryDaArchiviare
Il comando è composto da una serie di stringhe dette argomenti. Il primo argomento è il nome stesso del comando, mentre i successivi sono indicati con il nome di parametri posizionali.
Questi ultimi possono essere suddivisi in alcune categorie logiche:
una opzione è un argomento, generalmente incluso nella documentazione del comando, la cui presenza modifica il comportamento del comando stesso.
Una opzione può esistere nella versione corta, che consiste in un trattino seguito da una singola lettera (ad esempio, '-f' nel comando precedente), o nella versione lunga. Di quest'ultima, si hanno due formati: nello stile GNU si ha un doppio trattino seguito da una serie di due o più lettere (ad esempio '--help'); lo stile XF86 ha un singolo trattino come prefisso (ad esempio '-verbose').
Più opzioni corte possono essere raggruppate in un singolo argomento (ad esempio, '-cv' nel comando precedente).un parametro è un argomento che può fornire informazioni aggiuntive al comando o a un'opzione a cui si riferisce. Nel comando precedente, 'mioArchivio.tar' è un parametro dell'opzione '-f', mentre 'directoryDaArchiviare' è un parametro per il comando 'tar'. Qualora si volesse aggiungere al comando un parametro che ha l'aspetto di una opzione, ma non la sua funzione, è possibile separarlo dal resto del comando scrivendolo dopo un doppio trattino '--'
Fatta questa premessa, è utile notare che il comando precedente è equivalente al comando:
tar -vcf mioArchivio.tar directoryDaArchiviare
In questo comando, tutte le opzioni corte sono state riunite e ne è stato cambiato l'ordine. Analogamente, l'ordine con cui vengono scritte le opzioni lunghe, insieme ai loro eventuali parametri, non ne altera il significato.
Il parsing della riga di comando è quindi la procedura con cui un comando, o uno script, interpretano le istruzioni fornite dall'utente tramite una opportuna combinazione di opzioni e parametri. Nel caso di uno script, per poter effettuare facilmente questo parsing, si possono usare due strumenti molto versatili: getopt e getopts (fare attenzione alla 's' finale nel secondo comando).
Parsing della riga di comando usando getopt
L'utilità del comando getopt consiste nel rendere canonica la lista di parametri e opzioni che vengono passate a uno script.
- Passo 1
- Passo 2
- Passo 3
Titolo 2
Pregi del comando getopt
Difetti del comando getopt
Il comando getopt descritto in questa guida non è un built-in della shell, ma è attualmente incluso nel pacchetto utils-linux e precedentemente nella glibc (cioè, la GNU lib c).
Parsing della riga di comando usando getopts
Testo...
- Passo 1
- Passo 2
- Passo 3
Titolo 2
Testo...
Pregi del comando getopts
A differenza di getopt, il comando getopts è un built-in della shell. Questo comporta che:
- è definito nello standard POSIX;
non c'è bisogno di fare attenzione alle sue diverse implementazioni, come avviene per getopt;
- non ha bisogno di programmi esterni per accedere ai parametri posizionali;
- può avere accesso diretto alle variabili della shell, che può usare per fare il parsing.
Difetti del comando getopts
Il comando getops è in grado di fare il parsing solo delle opzioni corte. Se lo script prevede l'uso di opzioni lunghe, sia nello stile GNU sia nello stile XF86, getopts non è la scelta opportuna.
Funzionamento
Per il suo funzionamento, getopts usa le seguenti variabili
Variabile |
Descrizione |
OPTIND |
Contiene l'indice del parametro posizionale del prossimo argomento da processare. È il modo in cui getopts tiene traccia del proprio stato ed è utile per poter fare uno shift dei parametri posizionali, dopo averli analizzati con getopts |
OPTARG |
|
OPTERR |
|
Ulteriori risorse
- Risorsa 1
- Risorsa 2