Hvordan håndtere kommandolinje -argumenter i bash?

Hvordan håndtere kommandolinje -argumenter i bash?

I Linux bruker vi kommandolinjeargumenter som innspill til bash-skriptet. Bash kan ta disse kommandolinjeargumentene sekvensielt og analysere dem som et alternativ. Disse argumentene lar deg påvirke handlingene og skriptets output dynamisk.

Du kan konfigurere disse argumentene annerledes for å påvirke inngangen og utgangen. Det er grunnen til at håndtering av kommandolinje args i bash er viktig, men mange nye brukere må lære å gjøre det. Så i denne guiden vil vi forklare forskjellige måter å håndtere kommandolinjeargumenter i bash.

Hvordan håndtere kommandolinje -argumenter i bash?

Det er forskjellige måter å håndtere kommandolinje args i bash, så la oss se på dem for å få kort informasjon:

Getopt -funksjonen

GetOPT -funksjonen er nyttig ettersom den gir alternativene og syntaks for å definere og analysere argumenter i bash. Det er en innebygd funksjon av Linux som du kan bruke mens du oppretter en databasefil eller rapport i et bestemt format basert på argumentene. GetOPT-funksjonen er med på å analysere de korte kommandolinjeargumentene fordi det er to typer argumenter:

  • Korte argumenter: Dette er argumentene i en karakter etterfulgt av bindestrek. For eksempel -a, -l, -h, etc., er noen få eksempler på enkeltargumenter.
  • Lange argumenter: Dette er argumentene i flere karakterer etterfulgt av en dobbelt-hyphen. Det er forskjellige eksempler på lange argumenter, for eksempel -all, -liste, -hjelp osv.

La oss ta et eksempel der vi vil håndtere kommandolinjens argumenter ved hjelp av getopt -verktøyet. Vi har laget et bash -skript som heter “getopt.SH ”som inneholder følgende informasjon:

!/bin/bash
mens getopts 'A: B: C: D:' Detaljer; gjøre
sak "$ detaljer" i
EN)
Echo "Citizen Name Is $ Optarg" ;;
B)
ekko "Citizen ID er $ Optarg" ;;
C)
ekko "Fødselssted er $ Optarg" ;;
D)
ekko "yrke er $ optarg" ;;
*)
Avslutt 1 ;;
Esac
Ferdig
skift "$ (($ optind -1))"
Hvis [ ! -z $ 1]; deretter
ekko "Sivilstatus $ 1"
ellers
ekko "Ingen oppføringer"
Avslutt 1
fi
Hvis [ ! -z $ 2]; deretter
ekko "Familiemedlemmer $ 2"
fi

La oss nå utføre skriptet med de nødvendige argumentene i innspillet:

Som du kan se i bildet ovenfor, kjører vi skriptet bare med getopt -funksjoner og legger deretter til normale argumenter for å få det komplette resultatet.

Bruke flagg

Flagg er ikke annet enn enkelttegn foran bindestrek (-). Når vi passerer argumentene ved hjelp av getopt -funksjonen, bruker vi flagg. -a, -b, -c er noen eksempler på flagg. For eksempel krever et skript et borgerens navn, ID, sted, alder og yrke. Derfor brukte vi flagg j, k, l, m, n, for å definere innbyggerens navn, id, sted, alder og yrke samtidig:

#!/bin/bash
Mens Getopts J: K: L: M: N: Flag_Info
gjøre
case "$ Flag_info" i

  1. j) CitizenName = $ Optarg ;;

  2. k) Citizenid = $ Optarg ;;

  3. l) sted = $ optarg ;;

  4. m) alder = $ optarg ;;

  5. n) yrke = $ optarg ;;


Esac
Ferdig
ekko "Her er de angitte detaljene:"
Echo "Citizen Name: $ CitizenName";
ekko "Citizen ID: $ Citizenid";
ekko "sted: $ sted";
ekko "alder: $ alder";
ekko "yrke: $ yrke";

Skriptet vil gi følgende resultat i terminalen:

.//

Bruker $@ med løkker

"$@" -Variabelen er ingenting annet enn utvalget av alle inngangsargumenter. Vi kan bestå et hvilket som helst antall innganger ved hjelp av "$@" -variabelen. Du kan bruke denne variabelen som en sløyfe for å iterere gjennom argumentene. "$@" -Variabelen kommer godt med; Du kjenner ikke inngangsstørrelsen og kan ikke ta posisjonsargumentene. Derfor kan du bruke “$@” i stedet for å definere getopt -funksjonen igjen og igjen. Her er et eksempel på å bruke løkker og $@ sammen i et skript:

#!/bin/bash
num = (“$@”)
hvis [$# -GT 1]
deretter
Legg til = $ (($ num [0]+$ num [1])))
ekko "Tillegg av alle tall er: $ add"
subtraksjon = $ (($ num [0]-$ num [1]-$ num [2]))
ekko "subtraksjon av tallene er: $ subtraksjon"
multiply = $ (($ num [0]*$ num [1]*$ num [2]))
ekko "Multiplikasjon av tallene er: $ Multiply"
divisjon1 = $ (($ num [0]/$ num [1])))
Echo "Division of the $ num [0] og $ num [1] er: $ divisjon1"
divisjon2 = $ (($ num [1]/$ num [2])))
Echo "Division of $ num [1] og $ num [2] er: $ divisjon2"
divisjon3 = $ (($ num [0]/$ num [2])))
Echo "Division of $ num [0] og $ num [2] er: $ divisjon2"
fi

Ovennevnte skript utfører forskjellige aritmetiske beregninger basert på kommandolinjeargumentene. For eksempel har vi skrevet inn 50, 35 og 15 som inngang:

Ved hjelp av posisjonsparametere

Du kan få tilgang til posisjonsparametrene når de får tilgang til $ 1 først, deretter $ 2, og så videre. La oss for eksempel lage et skript som leser et navn som det første argumentet og deretter en by som det andre. Imidlertid, hvis du passerer byen først og deretter navnet, så vurderer den navnet som byen og omvendt. La oss ta et dypere dykk inn i følgende skript for å forstå dette konseptet:

#!/bin/bash
ekko "Her er de angitte detaljene"
ekko "Navn $ 1"
ekko "City $ 2"

Du må legge til navnet og byen på tidspunktet for å utføre skriptet i terminalen:

Innpakning

Dette er alt du trenger å vite om metodene for å håndtere kommandolinjeargumenter i bash. Vi har forklart forskjellige tilnærminger du kan prøve med passende eksempler. Det er forskjellige kommandoer hvis du vil legge til argumenter i skriptet. Så sørg for at du besøker Linuxhint for å lære mer om dem.