Hur man läser kommandoradsargument i Shell Script?

Hur man läser kommandoradsargument i Shell Script?

Introduktion

Kommandoradsargument är värden som skickas till ett shell script när det körs. Dessa argument kan användas för att konfigurera skriptet eller ange data till det. Att kunna läsa och tolka kommandoradsargument är en viktig färdighet för alla som skriver shell-skript.

I den här artikeln kommer vi att utforska olika sätt att läsa kommandoradsargument i shell-skript. Vi kommer att täcka både POSIX-kompatibla metoder och mer moderna metoder som är tillgängliga i nyare versioner av skalet.

Huvudrubriker

* POSIX-kompatibla metoder
* Moderna metoder
* Använda argumenttolkningsbibliotek
* Avslutning

POSIX-kompatibla metoder

POSIX-standarden definierar ett antal variabler som kan användas för att komma åt kommandoradsargument i shell-skript. Dessa variabler är:

* $#: Antalet argument som skickas till skriptet.
* $@: En lista över alla argument som skickas till skriptet.
$1**, **$2**, …, *$n: De enskilda argumenten som skickas till skriptet.

Till exempel:

shell
#!/bin/bash

echo "Antal argument: $#"
echo "Lista över argument: $@"
echo "Första argumentet: $1"

När du kör detta skript med följande kommandorad:

shell
./skript arg1 arg2 arg3

kommer det att producera följande utdata:


Antal argument: 3
Lista över argument: arg1 arg2 arg3
Första argumentet: arg1

Moderna metoder

Nyare versioner av skalet tillhandahåller mer moderna metoder för att läsa kommandoradsargument. Dessa metoder är mer kraftfulla och erbjuder bättre kontroll över argumenttolkningen.

Inbyggd getopts

Den inbyggda getopts-funktionen i skalet kan användas för att tolka kommandoradsargument. Den tillåter dig att ange en sträng med alternativ och argument och sedan hämta de enskilda argumenten och deras värden.

Till exempel:

shell
#!/bin/bash

while getopts ":abc:" opt; do
case $opt in
a)
echo "Alternativ -a angett."
;;
b)
echo "Alternativ -b angett."
;;
c)
echo "Alternativ -c angett med värdet $OPTARG."
;;
?)
echo "Ogiltigt alternativ: -$OPTARG"
exit 1
;;
esac
done

När du kör detta skript med följande kommandorad:

shell
./skript -ab -c värde

kommer det att producera följande utdata:


Alternativ -a angett.
Alternativ -b angett.
Alternativ -c angett med värdet värde.

Bash-matriser

Bash-matriser kan användas för att lagra kommandoradsargumenten. Du kan komma åt enskilda argument med hjälp av index.

Till exempel:

shell
#!/bin/bash

args=("$@")
echo "Antal argument: ${#args[@]}"
echo "Första argumentet: ${args[0]}"

När du kör detta skript med följande kommandorad:

shell
./skript arg1 arg2 arg3

kommer det att producera följande utdata:


Antal argument: 3
Första argumentet: arg1

Använda argumenttolkningsbibliotek

Det finns flera bibliotek från tredje part som kan användas för att tolka kommandoradsargument. Dessa bibliotek tillhandahåller en rik uppsättning funktioner för att validera och hantera argument.

Ett populärt argumenttolkningsbibliotek för skalet är getoptlong. Den tillhandahåller ett omfattande API för att definiera och tolka kommandoradsargument.

Till exempel:

shell
#!/bin/bash

Installera getoptlong

sudo apt install getoptlong

Inkludera getoptlong-biblioteket

. /usr/lib/getoptlong.sh

Definiera alternativ och argument

long_options="verbose,help"
options="v,h"

Tolka kommandoradsargumenten

getoptlong_process args "$@"

Hämta de tolkade argumenten

verbose=${GETOPT_VERBOSE}
help=${GETOPT_HELP}

if [ "$verbose" -eq 1 ]; then
echo "Verbose läge aktiverat."
fi

if [ "$help" -eq 1 ]; then
echo "Visar hjälpen."
exit 0
fi

När du kör detta skript med följande kommandorad:

shell
./skript -v

kommer det att producera följande utdata:


Verbose läge aktiverat.

Avslutning

Att kunna läsa och tolka kommandoradsargument är en viktig färdighet för alla som skriver shell-skript. I den här artikeln har vi utforskat olika sätt att uppnå detta, från POSIX-kompatibla metoder till mer moderna metoder och bibliotek från tredje part.

Genom att använda de metoder som beskrivs i den här artikeln kan du enkelt och effektivt hantera kommandoradsargumenten i dina shell-skript.

Vanliga frågor (FAQs)

1. Vad är skillnaden mellan $#, $@ och $1, $2, …?
– $

är antalet argument som skickas till skriptet, $@ är en lista över alla argument och $1, $2, … är de enskilda argumenten.

2. Hur använder jag getopts för att tolka alternativ och argument?
– Du kan använda getopts-funktionen med en sträng med alternativ och argument som argument. Funktionen kommer att tolka argumenten och uppdatera den givna variabeln med de tolkade värdena.
3. Kan jag använda Bash-matriser för att lagra kommandoradsargumenten?
– Ja, du kan använda Bash-matriser för att lagra kommandoradsargumenten. Du kan komma åt de enskilda argumenten med hjälp av index.
4. Finns det några bibliotek från tredje part för att tolka kommandoradsargument?
– Ja, det finns bibliotek från tredje part som getoptlong som kan användas för att tolka kommandoradsargument. Dessa bibliotek tillhandahåller en mer kraftfull och flexibel uppsättning funktioner.
5. Hur hanterar jag argument som innehåller mellanslag?
– För att hantera argument som innehåller mellanslag kan du använda citattecken runt argumenten i kommandoraden.
6. Hur validerar jag argumenten som skickas till mitt skript?
– Du kan använda antingen inbyggda skalfunktioner eller bibliotek från tredje part för att validera argumenten som skickas till ditt skript.
7. Hur kan jag få hjälp med argumenttolkning i skalet?
– Du kan konsultera skalmanualen eller leta efter exempel och handledningar online.
8. Finns det några ytterligare resurser för att lära sig om argumenttolkning i skalet?
Bash Guide for Beginners
Advanced Bash Scripting Guide
getoptlong Manual