Hur man läser kommandoradsargument i Shell Script?

By rik


Att Hantera Kommandoradsargument i Shell-Skript

Inledning

När du kör ett shell-skript kan du skicka med värden, kallade kommandoradsargument. Dessa argument fungerar som instruktioner till skriptet, som kan styra dess beteende eller mata in data. Att förstå hur man tar emot och bearbetar dessa argument är grundläggande för skriptutveckling.

Denna artikel granskar de olika teknikerna för att hantera kommandoradsargument i shell-skript. Vi kommer att gå igenom både klassiska, POSIX-kompatibla metoder och de mer avancerade som finns i moderna shell-versioner.

Översikt

  • Traditionella Metoder (POSIX)
  • Moderna Tillvägagångssätt
  • Användning av Hjälpbibliotek för Argument
  • Sammanfattning

Traditionella Metoder (POSIX)

POSIX-standarden erbjuder några nyckelvariabler för att hantera argument i skript:

  • $#: Antalet argument som skriptet mottog.
  • $@: En lista över alla inmatade argument.
  • $1, $2, …, $n: Enskilda argument som är ordnade från första till sista.

Exempel:

Om du har följande skript:


#!/bin/bash
echo "Antal argument: $#"
echo "Argumentlista: $@"
echo "Första argumentet: $1"

och du kör det med kommandot:


./skript test1 test2 test3

så kommer resultatet att vara:


Antal argument: 3
Argumentlista: test1 test2 test3
Första argumentet: test1

Moderna Tillvägagångssätt

Nyare versioner av shell ger mer avancerade sätt att hantera argument. Dessa metoder ger större flexibilitet och kontroll över hur argument tolkas.

Inbyggd getopts

Shells inbyggda getopts-funktion är ett verktyg för att tolka kommandoradsargument. Du kan definiera en uppsättning alternativ och argument, och getopts hjälper till att extrahera de individuella argumenten och deras värden.

Exempel:


#!/bin/bash
while getopts ":xyz:" opt; do
  case $opt in
    x)
      echo "Alternativ -x vald."
      ;;
    y)
      echo "Alternativ -y vald."
      ;;
    z)
      echo "Alternativ -z vald med värdet: $OPTARG."
      ;;
    ?)
      echo "Okänt alternativ: -$OPTARG"
      exit 1
      ;;
  esac
done

Om du kör skriptet med kommandot:


./skript -xy -z data

så får du följande resultat:


Alternativ -x vald.
Alternativ -y vald.
Alternativ -z vald med värdet: data.

Bash-arrayer

Bash-arrayer kan användas för att lagra kommandoradsargument. Varje argument kan nås med hjälp av sitt index.

Exempel:


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

Kör skriptet med:


./skript data1 data2 data3

Detta ger:


Antal argument: 3
Första argumentet: data1

Användning av Hjälpbibliotek för Argument

Det finns externa bibliotek som erbjuder mer sofistikerade funktioner för att tolka kommandoradsargument. Dessa bibliotek gör det enklare att hantera validering och komplex logik kring argument.

Ett vanligt bibliotek är getoptlong, vilket ger ett API för att definiera och analysera kommandoradsargument mer detaljerat.

Exempel:


#!/bin/bash
# Installera getoptlong (om det inte redan är installerat)
sudo apt install getoptlong
# Importera biblioteket
. /usr/lib/getoptlong.sh
# Definiera långa och korta alternativ
long_opts="verbose,help"
short_opts="v,h"
# Bearbeta argumenten
getoptlong_process arguments "$@"
# Hämta resultatet
verbose_mode=${GETOPT_VERBOSE}
help_mode=${GETOPT_HELP}

if [ "$verbose_mode" -eq 1 ]; then
  echo "Verbose-läge är aktiverat."
fi
if [ "$help_mode" -eq 1 ]; then
  echo "Visar hjälpen."
  exit 0
fi

När du kör skriptet med:


./skript -v

Resultatet blir:


Verbose-läge är aktiverat.

Sammanfattning

Kunskapen om att hantera kommandoradsargument är central för att utveckla effektiva shell-skript. Denna artikel har visat de vanligaste metoderna, från grundläggande POSIX-variabler till mer avancerade tekniker och externa bibliotek.

Genom att implementera dessa tekniker kan du göra dina skript flexibla och interaktiva för att möta användarnas krav.

Vanliga frågor (FAQ)

  1. Vad är skillnaden mellan $#, $@ och $1, $2…?
    $# returnerar antalet argument, $@ ger en lista av alla argument, och $1, $2 osv. hänvisar till individuella argument i ordning.
  2. Hur använder jag getopts för att bearbeta argument?
    – Du använder getopts tillsammans med en sträng som definierar tillgängliga alternativ. Funktionen kommer att analysera argumenten och uppdatera den angivna variabeln med resultatet.
  3. Kan Bash-arrayer användas för att lagra argument?
    – Absolut, Bash-arrayer är ett utmärkt sätt att spara och hantera kommandoradsargument. Du kan komma åt varje argument via dess index.
  4. Finns det tredjepartsbibliotek för att hantera kommandoradsargument?
    – Ja, bibliotek som getoptlong tillhandahåller mer avancerade funktioner för analys och validering av kommandoradsargument.
  5. Hur hanterar jag argument med mellanslag?
    – Du kan omsluta argument som innehåller mellanslag med citattecken i kommandot.
  6. Hur validerar jag argumenten?
    – Du kan använda inbyggda shell-funktioner eller bibliotek från tredje part för att validera argument som skickas till ditt skript.
  7. Var kan jag hitta mer information om argumenthantering i shell?
    – Konsultera shell-manualen eller leta efter resurser online.
  8. Finns det rekommenderade resurser för vidare läsning?
    – Här är några användbara länkar:
    Bash Guide for Beginners
    Advanced Bash Scripting Guide
    getoptlong Manual