getopts(1p): Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
Ingen redigeringssammanfattning
Rad 1: Rad 1:
= getopts(1p) =
== NAMN ==
== NAMN ==
getopts - tolka kommandoradsflaggor
<pre>
getopts tolka flaggor till kommandoradsverktyg
</pre>


== SYNOPS ==
== SYNOPSIS ==
getopts ''optstrang variabel'' [argument...]
<pre>
getopts optstr namn [argument ...]
</pre>


== BESKRIVNING ==
== BESKRIVNING ==
Kommandot <code>getopts</code> tolkar flaggor och flaggargument enligt POSIX:s rekommenderade syntaxregler (riktlinjer 3 till 10 i avsnitt 12.2). Det uppdaterar skalvariablerna <code>OPTIND</code> (aktuellt argumentindex) och <code>OPTARG</code> (flaggar med argument). Resultatet av den tolkade flaggan returneras i användardefinierad variabel ''variabel''.
<pre>
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:


Vid varje anrop hämtar <code>getopts</code> nästa flagga från argumentlistan. När en flagga kräver ett argument placeras det i <code>OPTARG</code>. Om en okänd flagga hittas sätts variabeln till <code>?</code>. Om <code>optstrang</code> börjar med <code>:</code> hanteras flaggfel tyst, och <code>OPTARG</code> innehåller den felaktiga flaggan.
* 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 <code>getopts</code> inte hittar fler flaggor returnerar det ett värde >0 och sätter <code>OPTIND</code> till indexet för första icke-flagga.
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.


<code>OPTIND</code> initieras till 1 varje gång ett skal startas. För att återanvända <code>getopts</code> på en ny parameterlista kan man själv sätta <code>OPTIND=1</code>.
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.
</pre>


== FLAGGOR ==
== FLAGGOR ==
<pre>
Inga.
Inga.
</pre>


== OPERANDER ==
== OPERANDER ==
''optstrang'':
<pre>
En sträng med flaggtecken. Tecken följda av <code>:</code> kräver argument. Det första tecknet styr hantering av fel (tyst eller med felmeddelande). ''?'' och '':'' får inte användas som flaggtecken.
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.


''variabel'':
namn 
Namn på skalvariabel där aktuell flagga sparas.
    Namnet en skalvariabel som sätts till den flagga som hittades.


Om ytterligare argument anges till <code>getopts</code> används dessa i stället för de positionella parametrarna.
Om argument anges till <i>getopts</i> kommer dessa att tolkas istället för skalets positionella parametrar.
</pre>


== STDIN ==
== STDIN ==
Används inte.
<pre>
Används ej.
</pre>


== INMATNINGSFILER ==
== INDATAFILAR ==
<pre>
Inga.
Inga.
</pre>


== MILJÖVARIABLER ==
== MILJÖVARIABLER ==
<code>LANG</code>,
<pre>
<code>LC_ALL</code>,
Följande miljövariabler påverkar körningen:
<code>LC_CTYPE</code>,
 
<code>LC_MESSAGES</code>,
LANG       Standardvärde för andra internationaliseringsvariabler.
<code>NLSPATH</code>: Påverkar lokalanpassning (t.ex. felmeddelanden).
 
<code>OPTIND</code>: Index för nästa argument som ska bearbetas. Kan justeras manuellt.
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.
</pre>


== ASYNKRONA HÄNDELSER ==
== ASYNKRONA HÄNDELSER ==
Standardbeteende.
<pre>
Standard.
</pre>


== STDOUT ==
== STDOUT ==
Används inte.
<pre>
Används ej.
</pre>


== STDERR ==
== STDERR ==
Felmeddelanden skrivs till standardfel om <code>optstrang</code> inte inleds med <code>:</code>. Dessa inkluderar:
<pre>
* Programnamn (motsvarar <code>$0</code>)
Om <i>optsträng</i> inte börjar med kolon (':') och ett fel upptäcks skrivs ett meddelande till standardfel med:
* Felaktigt flaggtecken
 
* Avsaknad av förväntat argument
* Programnamnet (värdet av $0)
* Den okända flaggan eller saknade flaggargumentet
</pre>


== UTGÅNGSFILER ==
== UTDATAFILAR ==
<pre>
Inga.
Inga.
</pre>


== UTFÖRLIG BESKRIVNING ==
== UTFÖRLIG BESKRIVNING ==
Ingen ytterligare information.
<pre>
Ingen.
</pre>


== AVSLUTNINGSSTATUS ==
== RETURSTATUS ==
0 om en flagga hittats (giltig eller ogiltig). Annars >0 vid slut på flaggor eller fel.
<pre>
0     En flagga hittades (även om den är ogiltig).
>0   Inga fler flaggor eller fel uppstod.
</pre>


== KONSEKVENSER VID FEL ==
== KONSEKVENSER VID FEL ==
Standard. Fel i flaggsyntax är inte fel i <code>getopts</code> utan i hur anropet formulerats.
<pre>
Standard.
 
<i>Följande avsnitt är informativa.</i>
</pre>


== ANVÄNDNING ==
== ANVÄNDNING ==
Eftersom <code>getopts</code> påverkar skalets miljö är det normalt en inbyggd funktion. Anrop i subsheller (t.ex. <code>(getopts ...)</code>) har ingen effekt utanför.
<pre>
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.


Shellfunktioner delar <code>OPTIND</code> med det yttre skalet. Om båda använder <code>getopts</code> kan resultatet bli oförutsägbart.
Shell-funktioner delar <i>OPTIND</i> med det anropande skalet, vilket kan ge oförutsägbara resultat.
</pre>


== EXEMPEL ==
== EXEMPEL ==
<pre>
<pre>
aflag=
Ett skript som tolkar flaggor:
bflag=
while getopts ab: name
do
    case $name in
    a)  aflag=1;;
    b)  bflag=1
        bval="$OPTARG";;
    ?)  printf "Usage: %s: [-a] [-b value] args\n" "$0"
        exit 2;;
    esac
done


if [ -n "$aflag" ]; then
    aflag=
    echo "Flagga -a angavs"
    bflag=
fi
    while getopts ab: namn
if [ -n "$bflag" ]; then
    do
    echo "Flagga -b med värde '$bval' angavs"
        case $namn in
fi
        a)  aflag=1;;
shift $((OPTIND - 1))
        b)  bflag=1
echo "Återstående argument: $*"
            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$*"
</pre>
</pre>


== MOTIVERING ==
== MOTIV ==
<code>getopts</code> valdes istället för <code>getopt</code> eftersom det hanterar argument med blanksteg. Variabeln <code>OPTARG</code> är utåt endast (output-only) och påverkar inte exekvering.
<pre>
<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>.


<code>:</code> som första tecken i <code>optstrang</code> inaktiverar felmeddelanden och motsvarar tidigare <code>OPTERR</code>-logik.
Exakt felmeddelandeformat specificeras inte, men ska inkludera programnamn, flaggtecken och feltyp.
</pre>


== FRAMTIDA ÄNDRINGAR ==
== FRAMTIDA RIKTNINGAR ==
Inga planerade.
<pre>
Inga.
</pre>


== SE ÄVEN ==
== SE ÄVEN ==
[[getopt(1p)]]
<pre>
[[getopt(3p)]]
[[getopt(3p)]]
[[pax(1p)]]
[[pax(1p)]]
POSIX.1‐2017:
  - Kapitel 8, "Environment Variables"
  - Avsnitt 12.2, "Utility Syntax Guidelines"
  - Avsnitt 2.5.2, "Special Parameters"
</pre>


== COPYRIGHT ==
== COPYRIGHT ==
Texten är baserad på IEEE Std 1003.1-2017 och återges med tillåtelse. Eventuella fel härleds till konverteringsprocessen. För ursprunglig version, se: http://www.opengroup.org/unix/online.html
<pre>
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
</pre>
 
 


= Sidslut =
= Sidslut =

Versionen från 7 april 2025 kl. 07.30

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.