Kako prenijeti argumente na Bash-Script

Komande, sintaksu i primeri

Možete pisati bash skriptu tako da primi argumente specificirane kada se skript poziva iz komandne linije. Ovaj metod se koristi kada skripta mora da izvrši nešto drugačiju funkciju u zavisnosti od vrednosti ulaznih parametara (argumenata).

Na primer, možda imate skriptu pod nazivom "stats.sh" koja obavlja određenu operaciju u datoteci, kao što je brojanje njegovih reči. Ako želite da koristite taj skript na mnogim datotekama, najbolje je proslediti ime datoteke kao argument, tako da možete koristiti istu skriptu za sve datoteke koje se obrađuju. Na primjer, ako je ime datoteke koje treba obrađivati ​​"liste pesama", unosite sljedeću komandnu liniju:

sh stats.sh lista pjesama

Argumenti se pristupaju unutar skripte koristeći varijable $ 1, $ 2, $ 3, itd, gdje se $ 1 odnosi na prvi argument, $ 2 u drugi argument, i tako dalje. To je ilustrovano u sledećem primeru:

FILE1 = $ 1 wc $ FILE1

Za čitljivost dodijelite varijablu sa opisnim imenom vrijednošću prvog argumenta ($ 1), a zatim pozovite korisničko ime za broj riječi ( wc ) na ovoj varijabli ($ FILE1).

Ako imate promenljivi broj argumenata, možete koristiti promenljivu "$ @", koja je niz svih ulaznih parametara. To znači da možete koristiti za-petlje da biste ih iteralno obrađivali, kao što je prikazano u sledećem primeru:

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

Evo primera kako to nazivati ​​skriptom sa argumentima iz komandne linije:

sh stats.sh songlist1 songlist2 songlist3

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

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Često se scenario piše tako da korisnik može prenijeti argumente u bilo kom redosledu koristeći zastave. Sa metodom zastave, takođe možete napraviti neke od argumenata opciono.

Recimo da imate skriptu koja preuzima informacije iz baze podataka na osnovu određenih parametara, kao što su "korisničko ime", "datum" i "proizvod" i generiše izveštaj u određenom "formatu". Sada želite da napišete svoju skriptu tako da možete proći kroz ove parametre kada se skript pozove. Može izgledati ovako:

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

Bash omogućava ovu funkcionalnost funkcijom "getopts". Za gornji primjer, možete koristiti getopts na sljedeći način:

Ovo je vremenski ciklus koji koristi funkciju "getopts" i takozvani "optstring", u ovom slučaju "u: d: p: f:", da pređe kroz argumente. On-petlja se kreće kroz optstring, koja sadrži zastavice koje se mogu koristiti za prosleđivanje argumenata i dodeljuje vrijednost argumenta predviđenom za tu zastavu do varijable "opcija". Izjava slučaja dodeljuje vrijednost varijable "opcija" globalnoj varijabli koja se može koristiti nakon čitanja svih argumenata.

Kolone u opstringu znače da su potrebne vrednosti za odgovarajuće zastavice. U gornjem primjeru svim zastavama slijedi dvotačka: "u: d: p: f:". To znači, za sve zastave potrebna je vrijednost. Ako se, na primjer, ne očekuje da će vrijednost "d" i "f" vrijednosti, optstring bi bio "u: dp: f".

Dekle na početku opstringa, na primjer ": u: d: p: f:", ima potpuno drugačije značenje. Omogućava vam da rukujete zastavama koje nisu predstavljene u opstringu. U tom slučaju je vrednost promenljive "opcija" podešena na "?" a vrednost "OPTARG" je postavljena na neočekivanu zastavu. Omogućava vam da prikažete odgovarajuću poruku o grešci koja informiše korisnika o grešci.

Argumentima kojima prethodi zastava ignorišu getopts. Ako su pozivi navedeni u opstringu nisu predviđeni kada se skript pokrene, ništa se ne dešava, osim ako ne specijalno obradite ovaj slučaj u vašem kodu. Svaki argument sa kojim ne funkcionišu gepardi se i dalje može uhvatiti sa redovnim $ 1, $ 2, itd. Varijable.