Bemästra Linux-kommandoraden och Bash-skriptning · Lektion

Skriptargument och alternativ ($@, $#, getopts)

Lär dig att skicka argument till dina skript och tolka kommandoradsalternativ med hjälp av specialvariabler och 'getopts'.

Lektion 3 av 412 steg

Skriptargument och alternativ ($@, $#, getopts) är en gratis lektion i Bemästra Linux-kommandoraden och Bash-skriptning på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Bemästra Linux-kommandoraden och Bash-skriptning, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bemästra Linux-kommandoraden och Bash-skriptning innehåller totalt 4 lektioner.

Skriptargument: Varför använda dem?

Har du någon gång använt ett kommando som ls -l eller cp file1 file2? -l, file1 och file2 är alla argument! De talar om för kommandot vad det ska göra eller vad det ska arbeta med.

I Bash-skriptning gör argument skripten flexibla. I stället för att hårdkoda värden kan skriptet ta emot indata direkt från kommandoraden när det körs.

Åtkomst till positionsargument

När du kör ett skript med argument tilldelar Bash dem automatiskt till särskilda variabler som kallas positionsparametrar.

  • Det första argumentet är $1.
  • Det andra argumentet är $2.
  • Och så vidare, upp till $9.

För argument efter det nionde använder du klammerparenteser, till exempel ${10}, ${11} och så vidare. Dessa variabler innehåller värdena som skickats till skriptet.

Demo: Positionsargument

Nu ska vi se hur du får åtkomst till dessa argument i ett skript. Spara detta som greet.sh och kör det med ./greet.sh Alice Bob.

#!/bin/bash

echo "Hello, $1!"
echo "Welcome, $2."
echo "The third argument (if any) is: $3"

`$0` och `$#`: Skriptinformation

Bash tillhandahåller ytterligare några specialvariabler som ger dig information om själva skriptet och dess argument:

  • $0: Innehåller namnet på skriptet som körs. Det är användbart i felmeddelanden eller loggning.
  • $#: Den här variabeln innehåller det totala antalet positionsargument som skickats till skriptet.

De här variablerna hjälper dig att göra skripten robustare och mer användarvänliga.

Demo: `$0` och `$#`

Kör det här skriptet med olika antal argument, till exempel ./info.sh one two three eller bara ./info.sh.

#!/bin/bash

echo "Script name: $0"
echo "Number of arguments received: $#"

`$@` jämfört med `$*`: Alla argument

Ibland behöver du hänvisa till alla argument samtidigt. Bash erbjuder två sätt:

  • $@: Expanderas till separata argument. När det omges av dubbla citattecken ("$@") förblir varje argument ett separat ord, även om det innehåller blanksteg. Detta föredras vanligtvis i loopar.
  • $*: Expanderas till en enda sträng med alla argument. När det omges av dubbla citattecken ("$*") kombineras alla argument till ett enda ord, separerade av det första tecknet i IFS (Internal Field Separator, vanligtvis ett blanksteg).

Använd alltid "$@" när du itererar över argument för att bevara blanksteg!

Demo: Iterera med `"$@"`

Det här skriptet visar hur "$@" hanterar argument som innehåller blanksteg korrekt. Kör det så här: ./loop_args.sh hello "world wide" web

#!/bin/bash

echo "Processing arguments with \"$@\":"
for arg in "$@"; do
  echo "  Argument: [$arg]"
done

echo "\nProcessing arguments with \"$*\":"
for arg in "$*"; do
  echo "  Argument: [$arg]"
done

Alternativ: Mer än positionsargument

Positionsargument passar bra i enkla fall, men tänk om skriptet behöver valfria flaggor eller namngivna parametrar, till exempel -v för utförlig utskrift eller -f filename?

Det är här kommandoradsalternativ kommer in. De gör skripten mer flexibla och användarvänliga genom att låta användare ange inställningar i valfri ordning.

Bash tillhandahåller kommandot getopts särskilt för att tolka sådana alternativ.

`getopts`-syntax: `optstring`

Den grundläggande syntaxen för getopts är: getopts optstring variable.

  • optstring: En sträng med giltiga alternativtecken. Om ett alternativ kräver ett argument (som -f filename) följer du tecknet med ett kolon (till exempel f:).
  • variable: Ett variabelnamn där getopts lagrar det alternativtecken som behandlas för närvarande (till exempel opt).

getopts anger också OPTARG för alternativargument och OPTIND för indexet för nästa argument.

Demo: Grundläggande `getopts`

Det här skriptet behandlar alternativen -v (utförlig utskrift) och -f (fil). Prova att köra det: ./options.sh -v -f mydata.txt -x eller ./options.sh -vf mydata.txt

#!/bin/bash

while getopts "vf:" opt; do
  case $opt in
    v)
      echo "Verbose mode enabled."
      ;;
    f)
      echo "File specified: $OPTARG"
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

Snabbkontroll: Argumentvariabler

Fundera på följande skript och hur det körs:

#!/bin/bash
echo "Script: $0"
echo "Count: $#"
for arg in "$@"; do
  echo "Arg: $arg"
done

Om du kör: ./myscript.sh "Hello World" 123

Vad blir resultatet?

Sammanfattning: Argument och alternativ

Bra jobbat! Du har lärt dig att göra dina Bash-skript mycket mer mångsidiga:

  • Positionsargument: Använd $1, $2 och så vidare för att få direkt åtkomst till argument.
  • Specialvariabler: $0 för skriptnamnet, $# för antalet argument och "$@" för att iterera säkert över alla argument.
  • Kommandoradsalternativ: Använd getopts för att tolka namngivna alternativ (som -v) och deras argument (-f filename), så att skripten blir robustare och mer användarvänliga.

Öva på att använda dessa i dina egna skript för att bygga kraftfulla och flexibla kommandoradsverktyg!

Gratis att börja

Lär dig Bash med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
22
Lektioner
88

Vanliga frågor

Är lektionen ”Skriptargument och alternativ ($@, $#, getopts)” gratis?

Ja – hela texten till ”Skriptargument och alternativ ($@, $#, getopts)” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Bemästra Linux-kommandoraden och Bash-skriptning, kan Ni uppgradera till CoddyKit PRO. Kursen i Bemästra Linux-kommandoraden och Bash-skriptning innehåller totalt 4 lektioner.

Vad lär jag mig i ”Skriptargument och alternativ ($@, $#, getopts)”?

Lär dig att skicka argument till dina skript och tolka kommandoradsalternativ med hjälp av specialvariabler och 'getopts'. Ni övar på Bemästra Linux-kommandoraden och Bash-skriptning med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Bemästra Linux-kommandoraden och Bash-skriptning?

Du behöver inga förkunskaper. Utbildningen i Bemästra Linux-kommandoraden och Bash-skriptning på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Skriptargument och alternativ ($@, $#, getopts)”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Bemästra Linux-kommandoraden och Bash-skriptning-lektionen?

Ja. Varje Bemästra Linux-kommandoraden och Bash-skriptning-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Loopkonstruktioner (for, while)
  2. Funktioner i Bash-skript
  3. Skriptargument och alternativ ($@, $#, getopts)
  4. case-satsen och mönstermatchning
← Tillbaka till Bemästra Linux-kommandoraden och Bash-skriptning