Kako prenesti argumente v bash-Script

Ukazi, sintaksa in primeri

Lahko napišete bash skript, tako da prejme argumente, ki se določijo, ko je skript pozvan iz ukazne vrstice. Ta metoda se uporablja, kadar mora scenarij izvajati nekoliko drugačno funkcijo, odvisno od vrednosti vhodnih parametrov (argumentov).

Na primer, imate morda skript, imenovan "stats.sh", ki izvaja določeno operacijo v datoteki, na primer štetje njegovih besed. Če želite uporabiti ta skript v več datotekah, je najbolje, da ime datoteke prenesete kot argument, tako da lahko uporabite isti skript za vse datoteke, ki jih želite obdelati. Na primer, če je ime datoteke, ki jo želite obdelati, "seznam pesmi", vnesite naslednjo ukazno vrstico:

sh stats.sh seznam skladb

Argumenti so dostopni znotraj skripta z uporabo spremenljivk $ 1, $ 2, $ 3 itd., Kjer se $ 1 nanaša na prvi argument, $ 2 v drugi argument in tako naprej. To je prikazano v naslednjem primeru:

FILE1 = $ 1 wc $ FILE1

Za berljivost dodajte spremenljivko z opisnim imenom na vrednost prvega argumenta ($ 1) in nato na to spremenljivko pokličite pomožno številko besede ( wc ) ($ FILE1).

Če imate spremenljivo število argumentov, lahko uporabite spremenljivko "$ @", ki je niz vseh vhodnih parametrov. To pomeni, da lahko uporabite za zanke, da jih ponovite vsakič, kot je prikazano v naslednjem primeru:

za datoteko FILE1 v storitvi "$ @" do wc $ FILE1

Tukaj je primer tega, kako poklicati ta skript z argumenti iz ukazne vrstice:

sh stats.sh songlist1 songlist2 songlist3

Če argument vsebuje presledke, ga morate priložiti z enojnimi narekovaji. Na primer:

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

Pogosto je scenarij napisan tako, da lahko uporabnik v poljubnem vrstnem redu uporabi oznake. Z metodo zastavic lahko nekatere argumente naredite neobvezno.

Recimo, da imate skript, ki pridobiva podatke iz baze podatkov na podlagi določenih parametrov, kot so »uporabniško ime«, »datum« in »izdelek« in ustvari poročilo v določeni »obliki«. Zdaj želite napisati svoj skript, tako da lahko prenesete te parametre, ko skript pokličete. Morda bi bilo videti tako:

makereport -u jsmith -p prenosni računalniki -d 10-20-2011 -f pdf

Bash to funkcijo omogoča funkcijo "getopts". Za zgornji primer lahko uporabite getopts na naslednji način:

To je časovno zanko, ki uporablja funkcijo "getopts" in tako imenovano "optstring", v tem primeru "u: d: p: f:", da ponovite argumente. Čas kroga poteka skozi optstring, ki vsebuje zastave, ki jih je mogoče uporabiti za posredovanje argumentov, in dodeli vrednost argumenta, ki je bila tej zastavi dodana spremenljivki "opcija". Izpisek nato dodeli vrednost spremenljivke "opcija" v globalno spremenljivko, ki se lahko uporabi po branju vseh argumentov.

Koloni v optstringu pomenijo, da so za ustrezne zastavice potrebne vrednosti. V zgornjem primeru sledijo vse zastavice dvopičje: "u: d: p: f:". To pomeni, da morajo vse zastavice imeti vrednost. Če na primer ne bi pričakovali, da imajo zastavice "d" in "f" vrednost, bi bila optstring "u: dp: f".

Dvopičje na začetku optstringa, na primer ": u: d: p: f:", ima popolnoma drugačen pomen. Omogoča vam upravljanje z zastavami, ki v optstringu niso prikazane. V tem primeru je vrednost spremenljivke "opcija" nastavljena na "?" in vrednost "OPTARG" je nastavljena na nepričakovano zastavo. Omogoča prikaz ustreznega sporočila o napaki, ki uporabnika napoti.

Argumenti, pred katerimi ni zastava, ignorirajo geometri. Če se sklici imenujejo zastavice, določene v optstringu, se ne zgodi nič, razen če tega posebej ne obravnavate v kodi. Vse argumente, s katerimi se ne ukvarjajo getops, se lahko še vedno zajame z rednimi $ 1, $ 2, itd. Spremenljivkami.