Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "leon-wells/ParsingDellaRigaDiComando"
Differenze tra le versioni 57 e 59 (in 2 versioni)
Versione 57 del 19/11/2021 00.03.38
Dimensione: 13241
Autore: leon-wells
Commento:
Versione 59 del 19/11/2021 09.41.32
Dimensione: 15092
Autore: leon-wells
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 40: Linea 40:
 * 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'').   * 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'').
 {{{
 getopt --Test
 }}}
Linea 47: Linea 50:
'''optsting''' è una stringa che informa il comando relativamente alle opzioni nel formato corto che possono essere trovate durante il parsing. Se il carattere che indica l'opzione è seguito dai due punti, l'opzione accetta un parametro obbligatorio, mentre, se è seguito da una coppia di doppi punti, il parametro è opzionale. '''parameters''' indica invece a ''getopt'' la stringa degli argomenti su cui operare; generalmente è posta uguale ai parametri posizionali passati allo script.

La seconda sintassi ha la forma
'''optsting''' è una stringa che informa il comando relativamente alle opzioni nel formato corto che possono essere trovate durante il parsing. Questa stringa deve essere racchiusa tra doppi apici, inoltre: se il carattere che indica l'opzione è seguito dai due punti, l'opzione accetta un parametro obbligatorio; se è seguito da una coppia di doppi punti, accetta un parametro opzionale. '''parameters''' indica invece a ''getopt'' la stringa degli argomenti su cui operare. Generalmente si indica come '''parameters''' la string dei parametri posizionali passati allo script, cioè "$@"; se si vuole passare una stringa alternativa, questa non va racchiusa tra apici, né singoli né doppi.

Le altre due sintassi hanno rispettivamente la forma
Linea 53: Linea 56:

e
Linea 58: Linea 60:
in cui '''optstring''' e '''parameters''' sono gli stessi visti nella prima sintassi. Le parti racchiuse tra le parentesi quadre sono opzionali, mentre la barra verticale indica che l'opzione alla sua sinistra e quella alla sua destra sono equivalenti. La stringa '''options''' contiene una serie di opzioni e rispettivi parametri che modificano il funzionamento del comando. Tra queste, le più importanti sono:
 * {{{
-l|--longoptions longopts
}}} permette di indicare al comando che durante il parsing potrà incontrare opzioni lunghe, che, analogamente alle opzioni corte, vengono specificate nella stringa '''longopts'''. Di nuovo, se la stringa che indica l'opzione lunga è seguita dai due punti, questa accetta un parametro obbligatorio; se è seguita da una coppia di doppi punti, accetta un parametro facoltativo.
 * {{{
-a|--alternative
}}} abilita la '''''stile XF86''''' per le opzioni lunghe.
 * {{{
-n|--name progname
}}} permette di impostare un nome per lo script.
 * {{{
-q|--quiet
}}} disabilita l'output degli errori da parte di ''getopt''.
 * {{{
-Q|--quiet-output
}}} indica a ''getopt'' di non produrre il suo output, ma gli errori incontrati nel parsing vengono ancora riportati.
Linea 62: Linea 79:
A seconda della sintassi, ''getopt'' può essere chiamato in uno dei seguenti modi:
 * {{{getopt "hf:t::" $@
}}} in cui si indica a getopt che nel parsing potrà accettare l'opzione 'h' senza parametro, l'opzione 'v' con un parametro obbligatorio e l'opzione 't' con un parametro facoltativo.
 * {{{getopt -l "help,version::,verbose" -- "n:v::V" "$@"
}}}

 *{{{getopt
}}}


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).

getopt

Il comando getopt analizza una stringa di parametri e ne restituisce una versione canonica, che potrà poi essere analizzata più facilmente.

Pro

Contro

  • 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).

     getopt --Test

Funzionamento

Il comando getopt può essere chiamato con tre diverse sintassi. La più semplice è:

getopt optstring parameters

optsting è una stringa che informa il comando relativamente alle opzioni nel formato corto che possono essere trovate durante il parsing. Questa stringa deve essere racchiusa tra doppi apici, inoltre: se il carattere che indica l'opzione è seguito dai due punti, l'opzione accetta un parametro obbligatorio; se è seguito da una coppia di doppi punti, accetta un parametro opzionale. parameters indica invece a getopt la stringa degli argomenti su cui operare. Generalmente si indica come parameters la string dei parametri posizionali passati allo script, cioè "$@"; se si vuole passare una stringa alternativa, questa non va racchiusa tra apici, né singoli né doppi.

Le altre due sintassi hanno rispettivamente la forma

getopt [options] [--] optstring parameters

e

getopt [options] -o|--options optstring [options] [--] parameters

in cui optstring e parameters sono gli stessi visti nella prima sintassi. Le parti racchiuse tra le parentesi quadre sono opzionali, mentre la barra verticale indica che l'opzione alla sua sinistra e quella alla sua destra sono equivalenti. La stringa options contiene una serie di opzioni e rispettivi parametri che modificano il funzionamento del comando. Tra queste, le più importanti sono:

  • -l|--longoptions longopts

    permette di indicare al comando che durante il parsing potrà incontrare opzioni lunghe, che, analogamente alle opzioni corte, vengono specificate nella stringa longopts. Di nuovo, se la stringa che indica l'opzione lunga è seguita dai due punti, questa accetta un parametro obbligatorio; se è seguita da una coppia di doppi punti, accetta un parametro facoltativo.

  • -a|--alternative

    abilita la stile XF86 per le opzioni lunghe.

  • -n|--name progname
    permette di impostare un nome per lo script.
  • -q|--quiet

    disabilita l'output degli errori da parte di getopt.

  • -Q|--quiet-output

    indica a getopt di non produrre il suo output, ma gli errori incontrati nel parsing vengono ancora riportati.

Esempi d'uso

A seconda della sintassi, getopt può essere chiamato in uno dei seguenti modi:

  • {{{getopt "hf:t::" $@

}}} in cui si indica a getopt che nel parsing potrà accettare l'opzione 'h' senza parametro, l'opzione 'v' con un parametro obbligatorio e l'opzione 't' con un parametro facoltativo.

  • {{{getopt -l "help,version::,verbose" -- "n:v::V" "$@"

}}}