Kako polagati argumente u Bash-Script

Naredbe, sintaksa i primjeri

Možete pisati bash skriptu tako da prima argumente navedene kada se skripta zove iz naredbenog retka. Ova se metoda koristi kada skripta mora izvoditi neznatno različitu funkciju ovisno o vrijednostima ulaznih parametara (argumenata).

Na primjer, možda imate skriptu pod nazivom "stats.sh" koja obavlja određenu radnju na datoteci, kao što je brojanje riječi. Ako želite koristiti tu skriptu na mnogim datotekama, najbolje je dodati naziv datoteke kao argument, tako da možete koristiti istu skriptu za sve datoteke koje treba obrađivati. Na primjer, ako je naziv datoteke koju treba obrađivati ​​"popis pjesama", unosite sljedeću naredbu:

sh stats.sh popis pjesama

Argumente se pristupa unutar skripte pomoću varijabli $ 1, $ 2, $ 3 itd., Gdje se $ 1 odnosi na prvi argument, $ 2 za drugi argument i tako dalje. Ovo je ilustrirano u sljedećem primjeru:

FILE1 = $ 1 wc $ FILE1

Za čitljivost dodajte varijablu s opisnim nazivom na vrijednost prvog argumenta ($ 1), a zatim nazovite program za brojanje riječi ( wc ) na ovu varijablu ($ FILE1).

Ako imate promjenjivi broj argumenata, možete upotrijebiti varijablu "$ @", koja je niz svih ulaznih parametara. To znači da možete koristiti for-loop da iterativno obradi svaki, kao što je ilustrirano u sljedećem primjeru:

za FILE1 u "$ @" učinite wc $ FILE1 učinjeno

Evo primjera kako pozvati ovu skriptu s argumentima iz naredbene linije:

sh stats.sh pjesma1 songlist2 songlist3

Ako argument ima razmake, trebate ga priložiti pojedinačnim navodnicima. Na primjer:

sh stats.sh 'popis pjesama 1' 'popis pjesama 2' 'popis pjesama 3'

Često se napisana skripta tako da korisnik može prosljeđivati ​​argumente bilo kojim redoslijedom koristeći zastavice. Pomoću metode zastavica možete i neke od argumenata učiniti opcionalnim.

Recimo da imate skriptu koja preuzima podatke iz baze podataka na temelju određenih parametara, kao što su "korisničko ime", "datum" i "proizvod", a generira izvješće u određenom "formatu". Sada želite pisati skriptu tako da možete proći u tim parametrima kada se skripta zove. Moglo bi izgledati ovako:

makereport -u jsmith -p prijenosnici -d 10-20-2011 -f pdf

Bash omogućuje funkcionalnost s funkcijom "getopts". Za gore navedeni primjer, možete koristiti getopts kako slijedi:

Ovo je vrijeme-petlja koja koristi funkciju "getopts" i takozvanu "optstring", u ovom slučaju "u: d: p: f:", kako bi iterirali kroz argumente. Kružna točka prolazi kroz optstring, koji sadrži zastavice koje se mogu koristiti za prolaženje argumenata i dodjeljuje argumentnu vrijednost za tu zastavicu varijabli "opcija". Slučaj-izjava zatim dodjeljuje vrijednost varijable "opcija" globalnoj varijabli koja se može koristiti nakon čitanja svih argumenata.

Dvotočke u optstringu znače da su vrijednosti potrebne za odgovarajuće zastavice. U gornjem primjeru sve zastave slijedi dvotočka: "u: d: p: f:". To znači da sve zastavice trebaju vrijednost. Ako, na primjer, "d" i "f" zastave ne bi trebale imati vrijednost, optstring bi bio "u: dp: f".

Debelo crijevo na početku optstringa, na primjer ": u: d: p: f:", ima potpuno drugačije značenje. Omogućuje vam rukovanje zastavama koje nisu prikazane u optstringu. U tom slučaju vrijednost varijable "opcija" postavljena je na "?" a vrijednost "OPTARG" postavljena je na neočekivanu zastavicu. Omogućuje vam da prikažete odgovarajuću poruku o pogrešci koja obavještava korisnika o pogrešci.

Argumenti koje nije prethodila zastava ignoriraju getopts. Ako zastavice navedene u optstringu nisu predviđene kada se skripta zove, ništa se ne događa, osim ako posebno ne riješite ovaj slučaj u kodu. Bilo koji argumenti koji se ne obrađuju od strane getopova i dalje se mogu zarobiti s redovitim varijablama od $ 1, $ 2 itd.