Hvordan håndtere kommandolinjeargumenter i Bash?

Hvordan Handtere Kommandolinjeargumenter I Bash



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

Du kan konfigurere disse argumentene annerledes for å påvirke input og output. Det er derfor det er viktig å håndtere kommandolinjearg i bash, men mange nye brukere må lære hvordan de gjør det. Så i denne guiden vil vi forklare forskjellige måter å håndtere kommandolinjeargumenter i bash.







Hvordan håndtere kommandolinjeargumenter i Bash?

Det er forskjellige måter å håndtere kommandolinjearg i Bash, så la oss ta en titt på dem for å få kort informasjon:



Getopt-funksjonen



Getopt-funksjonen er nyttig da den gir alternativer og syntaks for å definere og analysere argumenter i bash. Det er en innebygd funksjon i Linux som du kan bruke mens du lager en databasefil eller rapport i et spesifikt format basert på argumentene. Getopt-funksjonen hjelper til med å analysere de korte kommandolinjeargumentene fordi det er to typer argumenter:





  • Korte argumenter: Dette er argumentene med ett tegn etterfulgt av en bindestrek. For eksempel, -a, -l, -h, osv., er noen få eksempler på enkeltargumenter.

  • Lange argumenter: Dette er argumentene med flere tegn etterfulgt av en dobbel bindestrek. Det finnes ulike eksempler på lange argumenter, som –alle, –liste, –hjelp osv.

La oss ta et eksempel der vi vil håndtere kommandolinjeargumentene ved å bruke getopt-verktøyet. Vi har laget et bash-skript kalt 'getopt.sh' som inneholder følgende informasjon:



!/ bin / bash

samtidig som getopts 'A:B:C:D:' detaljer; gjøre

sak ' $detaljer ' i

EN )

ekko 'Borgerens navn er $OPTARG ' ;;

B )

ekko «Borger-ID er $OPTARG ' ;;

C )

ekko 'Fødestedet er $OPTARG ' ;;

D )

ekko 'Okkupasjonen er $OPTARG ' ;;

* )

exit 1 ;;

esac

ferdig

skifte ' $(($OPTING -1) )'



hvis [ ! -Med $1 ] ; deretter

ekko 'Sivilstand $1'

ellers

ekko 'Ingen oppføringer'

exit 1

være



hvis [ ! -Med $2 ] ; deretter

ekko 'Familiemedlemmer $2'

være

La oss nå kjøre skriptet med de nødvendige argumentene i inngangen:

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

Bruke flagg

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

#!/bin/bash

Samtidig som getopts j:k:l:m:n: flagg_info

gjøre

sak ' ${flag_info} ' i
< ol >
< at > j ) statsborgernavn = ${OPTARG} ;; at >
< at > k ) statsborger = ${OPTARG} ;; at >
< at > l ) plass = ${OPTARG} ;; at >
< at > m ) alder = ${OPTARG} ;; at >
< at > n ) yrke = ${OPTARG} ;; at >
ol >
esac

ferdig

ekko 'Her er de angitte detaljene:'

ekko 'Indborgers navn: $citizenname ' ;

ekko 'Borger-ID: $borger ' ;

ekko 'Plass: $sted ' ;

ekko 'Alder: $alder ' ;

ekko 'Yrke: $okkupasjon ' ;

Skriptet vil gi følgende resultat i terminalen:

. /< manus > .sh -j Danny -k 476 -l Toronto -m 25 -n Forfatter

Ved hjelp av [e-postbeskyttet] Med løkker

« [e-postbeskyttet] variabelen er ingenting annet enn matrisen av alle input-argumenter. Vi kan sende et hvilket som helst antall innganger ved å bruke ' [e-postbeskyttet] variabel. Du kan bruke denne variabelen som en løkke for å iterere gjennom argumentene. « [e-postbeskyttet] ” variabel kommer godt med da; du kjenner ikke inndatastørrelsen og kan ikke ta posisjonsargumentene. Derfor kan du bruke ' [e-postbeskyttet] ”  i stedet for å definere getopt-funksjonen igjen og igjen. Her er et eksempel på bruk av loops og [e-postbeskyttet] sammen i et manus:

#!/bin/bash

på en = ( «$ @ )



hvis [ $# -gt 1 ]

deretter



legge 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 '



multiplisere =$ ( ( ${num[0]} * ${num[1]} * ${num[2]} ) )

ekko 'Multiplikasjon av tallene er: $multipliser '



divisjon 1 =$ ( ( ${num[0]} / ${num[1]} ) )

ekko 'Inndeling av ${num[0]} og ${num[1]} er: $divisjon1 '



divisjon 2 =$ ( ( ${num[1]} / ${num[2]} ) )

ekko 'Deling av ${num[1]} og ${num[2]} er: $divisjon2 '



divisjon 3 =$ ( ( ${num[0]} / ${num[2]} ) )

ekko 'Deling av ${num[0]} og ${num[2]} er: $divisjon2 '



være

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

Bruke posisjonsparametere

Du kan få tilgang til posisjonsparametrene når de først får tilgang til $1, 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. Men hvis du passerer byen først og deretter navnet, så anser den navnet som byen og omvendt. La oss ta et dypere dykk inn i følgende manus for å forstå dette konseptet:

#!/bin/bash

ekko 'Her er de angitte detaljene'

ekko 'navn $1'

ekko 'by $2'

Du må legge til navn og by når du kjører skriptet i terminalen:

Innpakning

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