Skriptargument och alternativ ($@, $#, getopts)
Lär dig att skicka argument till dina skript och tolka kommandoradsalternativ med hjälp av specialvariabler och 'getopts'.
Skriptargument och alternativ ($@, $#, getopts) är en gratis lektion i DevOps-bootcamp på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för DevOps-bootcamp, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DevOps-bootcamp 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 iIFS(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]"
doneAlternativ: 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 exempelf:).variable: Ett variabelnamn därgetoptslagrar det alternativtecken som behandlas för närvarande (till exempelopt).
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
doneSnabbkontroll: 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"
doneOm 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,$2och så vidare för att få direkt åtkomst till argument. - Specialvariabler:
$0för skriptnamnet,$#för antalet argument och"$@"för att iterera säkert över alla argument. - Kommandoradsalternativ: Använd
getoptsfö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!
Lär dig DevOps-bootcamp 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
- 142
- Lektioner
- 568
Vanliga frågor
Är lektionen ”Skriptargument och alternativ ($@, $#, getopts)” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen DevOps-bootcamp, inklusive ”Skriptargument och alternativ ($@, $#, getopts)”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i DevOps-bootcamp 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å DevOps-bootcamp 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 DevOps-bootcamp?
Du behöver inga förkunskaper. Utbildningen i DevOps-bootcamp 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 DevOps-bootcamp-lektionen?
Ja. Varje DevOps-bootcamp-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
- Loopkonstruktioner (for, while)
- Funktioner i Bash-skript
- Skriptargument och alternativ ($@, $#, getopts)
- case-satsen och mönstermatchning