getopts(1p)
Version från den 7 april 2025 kl. 07.30 av Admin (diskussion | bidrag)
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.