Kommandolinje argumenter

Kommandolinje argumenter
I mange tilfeller krever bash -skript argumentverdier for å gi inndatamternativer til skriptet. Du kan håndtere kommandolinjeargumenter i et bash-skript på to måter. Den ene er ved å bruke argumentvariabler, Og en annen er ved å bruke getopts funksjon. Hvordan du kan håndtere kommandolinjeargumenter vises i denne opplæringen.

Bruke argumentvariabler:

Argumentvariabelen starter fra $ 0. Hovedskriptfilnavnet lagres i $ 0, som mottar argumentverdier fra kommandolinje -argumenter. Hvis to argumenter sendes i kommandolinjen, vil sekvensielt argumentverdiene bli mottatt i $ 1 og $ 2 variabler.

Eksempel -1: Sende tre numeriske verdier i kommandolinjeargumentene

Lag en bash -fil med følgende skript. Skriptet vil motta tre-argumentverdier og lagre dem i $ 1, $ 2 og $ 3 variabler. Det vil telle det totale antall argumenter og utskriftsargumentverdier ved hjelp av en loop uten en loop. Summen av alle argumentverdier vil bli skrevet ut senere.

#!/bin/bash
# Teller totalt antall argumenter
ekko "Totalt antall argumenter: $#"
# Lese argumentverdier individuelt
ekko "Første argumentverdi: $ 1"
ekko "andre argumentverdi: $ 2"
ekko "Tredje argumentverdi: $ 3"
# Lese argumentverdier ved hjelp av loop
For Argval i "$@"
gjøre
ekko -n "$ argval"
Ferdig
# Legge til argumentverdier
Sum = $ (($ 1+$ 2+$ 3))
# Skriv ut resultatet
ekko -e "\ nresult of sum = $ sum"

Følgende utgang vises etter å ha utført skriptfilen med tre numeriske argumentverdier, 50, 35 og 15.

$ bash cmdline1.SH 50 35 15

Eksempel -2: Tar filnavn som et argument

Lag en bash -fil med følgende skript for å telle det totale antallet tegn i en hvilken som helst fil. Her vil filnavnet bli bestått som et kommandolinje-argument.

#!/bin/bash
filnavn = $ 1
TotalChar = 'WC -C $ Filname'
ekko "Totalt antall tegn er $ totalchar"

Kjør Bash -skriptet med filnavnet som en enkelt argumentverdi og kjør en annen kommando for å sjekke filens totale antall tegn. Her, ukedagen.TXT -fil brukes som en argumentverdi. Det totale antallet karakterer i ukedagen.TXT -filen er 57.

$ bash cmdline2.sh ukedag.tekst
$ wc -c ukedag.tekst

Bruke getopts -funksjon:

Hvis du vil lagre data i databasen eller en fil eller opprette en rapport i et bestemt format basert på kommandolinje -argumenterverdier, så er getopts Funksjon er det beste alternativet å gjøre oppgaven. Det er en innebygd Linux-funksjon. Så du kan enkelt bruke denne funksjonen i skriptet ditt for å lese formaterte data fra kommandolinjen.

Eksempel -3: Leseargumenter etter getopts -funksjon

Lag en bash -fil med følgende skript for å forstå bruken av getopts funksjon. 'getopts' funksjon brukes med en stund loop for å lese kommandolinje argumentalternativer og argumentverdier. Her brukes 4 alternativer som er 'Jeg', 'n', 'm' og 'E'. Saksuttalelsen brukes til å samsvare med det aktuelle alternativet og lagre argumentverdien i en variabel. Til slutt, skriv ut verdiene til variabelen.

#!/bin/bash
mens getopts ": i: n: m: e:" arg; gjøre
sak $ arg i
i) id = $ optarg ;;
n) navn = $ optarg ;;
m) produksjon_date = $ optarg ;;
e) utløp_dat = $ optarg ;;
Esac
Ferdig
ekko -e "\ n $ id $ name $ produksjon_date $ utløp_dat \ n"

Kjør filen med følgende alternativer og argumentverdier. Her, P100 er verdien av -i -alternativet, 'Varm kake'er verdien av -n alternativet,'01-01-2021'er verdien av -m -alternativet og'06-01-2021'er verdien av -e -alternativet.

$ bash cmdline3.sh -i p001 -n 'hot cake' -m '01 -01-2021 '-e '06 -01-2021'

Når du trenger å sende enkle verdier i et skript, er det bedre å bruke argumentvariabler. Men hvis du vil sende data på en formatert måte, er det bedre å bruke getopts -funksjonen for å hente argumentverdier. Bruken av både argumentvariabler og getopts -alternativer har vist i neste eksempel.

Eksempel-4: Å lese normale argumenter og argumenter med getopts-alternativer

Måtene å lese kommandolinjeargumenter ved å bruke argumentvariabler og getopts-alternativer er vist separat i tidligere eksempler på denne opplæringen. Men disse to måtene kan brukes i et enkelt skript for å lese kommandolinje argumentverdier. Lag et bash -skript med følgende kode for å lese kommandolinje -argumentverdiene som er gitt av getopts -alternativer og argumentparametere. Her har tre getopts -alternativer blitt brukt til å lese kommandolinjens vertsnavn, brukernavn og passord. Deretter har Shift -kommandoen blitt brukt til å fjerne alle GetOpts -alternativer fra kommandoen for å lese kommandolinjeverdiene ved å bruke argumentvariabler. Dette skriptet vil lese og skrive ut maksimalt tre verdier av argumentvariablene. Hvis ingen argumentverdi uten alternativ vil bli gitt etter utførelse av koden, vil en melding bli skrevet ut; Ellers vil verdiene til argumentvariabelen bli skrevet ut.

#!/bin/bash
# Lese argumenter med getopts -alternativer
mens getopts 'h: u: p:' alternativ; gjøre
sak "$ alternativ" i
h)
# Skriv ut vertsnavn
ekko "Vertsnavnet er $ Optarg" ;;
u)
# Skriv ut brukernavn
ekko "Brukernavnet er $ Optarg" ;;
p)
# Skriv ut passord
ekko "Passordet er $ Optarg" ;;
*)
# Skriv ut hjelpemelding for å gi gale alternativer
ekko "Bruk: $ 0 [-h verdi] [-u verdi] [-p verdi]"> & 2
# Avslutt fra skriptet
Avslutt 1 ;;
Esac
Ferdig
# Fjern alle alternativene som er overført med getopts -alternativer
skift "$ (($ optind -1))"
# Lesing av første normale argumenter
Hvis [ ! -z $ 1]; deretter
ekko "Det første tabellnavnet er $ 1"
ellers
ekko "Det er ikke gitt noe normalt argument.""
Avslutt 1
fi
# Lese andre normale argumenter
Hvis [ ! -z $ 2]; deretter
ekko "Det andre tabellnavnet er $ 2"
fi
# Lesing av tredje normale argumenter
Hvis [ ! -z $ 3]; deretter
ekko "Det tredje tabellnavnet er $ 3"
fi

Følgende utdata vises hvis feil alternativ er gitt på tidspunktet for utførelsen av koden. Her, alternativ -det eksisterer ikke i skriptet.

Følgende utdata vises hvis de gyldige alternativene med verdiene er gitt i kommandolinjen på tidspunktet for utførelse av koden.

Følgende utdata vises hvis de gyldige alternativene og normale argumentverdier brukes i kommandolinjen på tidspunktet for utførelse av koden. Her er de normale argumentene kunde og ansatt.

Bruker '$@' for å lese kommandolinjeargumenter:

Kommandolinjeargumentene kan leses uten å bruke argumentvariabler eller getopts-alternativer. Ved hjelp av '$@'Med den første braketten er en annen måte å lese alle kommandolinje argumentverdier.

Eksempel-5: Lese kommandolinje argumentverdier uten variabel

Lag en bash -fil med følgende skript for å lese argumentverdiene uten noen argumentvariabel og beregne summen av tre kommandolinje argumentverdier. “$@” Har blitt brukt med de første parentesene her for å lese alle argumentverdier i en matrise. Deretter vil summen av de tre første arrayverdiene bli skrevet ut.

#!/bin/bash
# Les alle argumenterverdier
ArgVals = ("$@")
# Sjekk det totale antall argumenter
hvis [$# -GT 2]
deretter
# Beregn summen av tre kommandolinjeargumenter
Sum = $ (($ ArgVals [0]+$ ArgVals [1]+$ ArgVals [2])))
ekko "Summen av 3 kommandolinjeargumenter er $ sum"
fi

Følgende utgang vises etter å ha utført skriptet ovenfor for argumentverdiene 12, 20 og 90. Summen av disse tallene er 122.

Konklusjon:

Måtene å gi kommandolinje argumentverdier uten noe alternativ og med alternativer har vist her. Måten å lese kommandolinje argumentverdier uten å bruke variabler har også vist. Jeg håper denne opplæringen vil hjelpe leserne til å bruke kommandolinje argumentverdier riktig i bashskriptet.