getopts(1p)

Från Wiki.linux.se
Version från den 7 april 2025 kl. 07.30 av Admin (diskussion | bidrag)
Hoppa till navigering Hoppa till sök

getopts(1p)

NAMN

getopts — tolka flaggor till kommandoradsverktyg

SYNOPSIS

getopts optstr namn [argument ...]

BESKRIVNING

Kommandot <i>getopts</i> läser in flaggor och flaggargument från en lista med parametrar. Det följer riktlinjerna 3 till 10 i POSIX.1‐2017, avsnitt 12.2, "Utility Syntax Guidelines".

Vid varje anrop sparas nästa flagga i skalvariabeln som anges av operanden <i>namn</i>, och indexet för nästa argument i variabeln <i>OPTIND</i>. När skalet startas sätts <i>OPTIND</i> till 1.

Om flaggan kräver ett argument, placeras detta i skalvariabeln <i>OPTARG</i>. Om ingen flagga hittas, eller om flaggan inte har ett argument, kommer <i>OPTARG</i> inte att vara satt.

Om ett tecken som inte ingår i <i>optsträng</i> hittas där en flagga förväntas, sätts <i>namn</i>-variabeln till frågetecknet <b>'?'</b>. Om första tecknet i <i>optsträng</i> är kolon <b>':'</b>, sätts <i>OPTARG</i> till det funna tecknet, annars skrivs ett felmeddelande till standard error och <i>OPTARG</i> sätts inte.

Om ett flaggargument saknas:

* Om <i>optsträng</i> börjar med kolon (<b>':'</b>), sätts <i>namn</i> till kolon och <i>OPTARG</i> till den funna flaggan.
* Annars sätts <i>namn</i> till frågetecken, <i>OPTARG</i> avsätts och ett felmeddelande skrivs till standardfel.

När flaggorna är slut returnerar kommandot ett värde större än noll. <i>OPTIND</i> sätts till index för första operanden eller <b>"$#"</b>+1 om inga operander finns. <i>namn</i>-variabeln sätts till frågetecken.

Variablerna <i>OPTIND</i> och <i>OPTARG</i> påverkar det aktuella skalets miljö och exporteras inte som standard. Om <i>OPTIND</i> sätts till 1, kan nya argument användas.

FLAGGOR

Inga.

OPERANDER

Följande operander stöds:

optsträng  
    En sträng som innehåller flaggtecken. Om ett tecken följs av kolon (':'), krävs ett argument. Tecken som '?' och ':' ska inte användas. Tecken som inte är alfanumeriska kan ge oförutsägbara resultat.

namn  
    Namnet på en skalvariabel som sätts till den flagga som hittades.

Om argument anges till <i>getopts</i> kommer dessa att tolkas istället för skalets positionella parametrar.

STDIN

Används ej.

INDATAFILAR

Inga.

MILJÖVARIABLER

Följande miljövariabler påverkar körningen:

LANG        Standardvärde för andra internationaliseringsvariabler.

LC_ALL      Överskrider alla andra locale-inställningar.

LC_CTYPE    Påverkar tolkning av text (t.ex. multibyte-tecken).

LC_MESSAGES Format och innehåll i felmeddelanden.

NLSPATH     Plats för meddelandekataloger.

OPTIND      Används av getopts som index för nästa argument.

ASYNKRONA HÄNDELSER

Standard.

STDOUT

Används ej.

STDERR

Om <i>optsträng</i> inte börjar med kolon (':') och ett fel upptäcks skrivs ett meddelande till standardfel med:

* Programnamnet (värdet av $0)
* Den okända flaggan eller saknade flaggargumentet

UTDATAFILAR

Inga.

UTFÖRLIG BESKRIVNING

Ingen.

RETURSTATUS

0     En flagga hittades (även om den är ogiltig).
>0    Inga fler flaggor eller fel uppstod.

KONSEKVENSER VID FEL

Standard.

<i>Följande avsnitt är informativa.</i>

ANVÄNDNING

Eftersom <i>getopts</i> påverkar det aktuella skalet är det vanligtvis inbyggt. Om det används i en subshell, som:

    (getopts abc värde "$@")
    nohup getopts ...
    find . -exec getopts ... \;

så påverkas inte skalets variabler.

Shell-funktioner delar <i>OPTIND</i> med det anropande skalet, vilket kan ge oförutsägbara resultat.

EXEMPEL

Ett skript som tolkar flaggor:

    aflag=
    bflag=
    while getopts ab: namn
    do
        case $namn in
        a)  aflag=1;;
        b)  bflag=1
            bval="$OPTARG";;
        ?)  printf "Användning: %s: [-a] [-b värde] args\n" "$0"
            exit 2;;
        esac
    done
    if [ ! -z "$aflag" ]; then
        printf "Flagga -a angavs\n"
    fi
    if [ ! -z "$bflag" ]; then
        printf 'Flagga -b "%s" angavs\n' "$bval"
    fi
    shift $(($OPTIND - 1))
    printf "Återstående argument: %s\n$*"

MOTIV

<i>getopts</i> valdes före <i>getopt</i> eftersom det hanterar argument med blanksteg bättre. <i>OPTARG</i> nämns inte som miljövariabel eftersom den inte påverkar körningen, endast resultatet.

Kolontecknet (':') används först i <i>optsträng</i> för att ändra felhanteringen. Det ersätter äldre användning av variabeln <i>OPTERR</i>.

Exakt felmeddelandeformat specificeras inte, men ska inkludera programnamn, flaggtecken och feltyp.

FRAMTIDA RIKTNINGAR

Inga.

SE ÄVEN

[[getopt(3p)]]
[[pax(1p)]]
POSIX.1‐2017:
  - Kapitel 8, "Environment Variables"
  - Avsnitt 12.2, "Utility Syntax Guidelines"
  - Avsnitt 2.5.2, "Special Parameters"

COPYRIGHT

Delar av denna text är återgivna från IEEE Std 1003.1-2017 och The Open Group Base Specifications Issue 7, 2018 Edition.

Vid avvikelser gäller den officiella versionen från IEEE och The Open Group:
http://www.opengroup.org/unix/online.html

Rapportera formateringsfel: https://www.kernel.org/doc/man-pages/reporting_bugs.html


Sidslut

Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/getopts.1p.html


Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.