Kiel pasi Argumentojn al Bash-Skripto

Komandoj, sintakso kaj ekzemploj

Vi povas skribi bash-skripton tia, ke ĝi ricevas argumentojn specifitajn kiam la skripto nomiĝas de la komandlinio. Ĉi tiu metodo estas uzata kiam skripto devas plenumi iomete malsaman funkcion laŭ la valoroj de enaj parametroj (la argumentoj).

Ekzemple, vi eble havas skripton nomitan "stats.sh", kiu prezentas apartan operacion en dosiero, kalkulante ĝiajn vortojn. Se vi volas uzi tiun skripton en multaj dosieroj, plej bone povas pasi la dosiernomon kiel argumenton, por ke vi povu uzi la saman skripton por ĉiuj dosieroj por esti procesitaj. Ekzemple, se la nomo de la dosiero por esti procesata estas "kantisto", vi enirus la sekvan komandlinion:

sh stats.sh songlist

Aliras al la argumentoj en la skripto uzante la variabloj $ 1, $ 2, $ 3, ktp, kie $ 1 raportas al la unua argumento, $ 2 al la dua argumento, kaj tiel plu. Ĉi tio estas ilustrata en la sekva ekzemplo:

FILE1 = $ 1 wc $ FILE1

Por legigebleco, atribuu variablon kun priskriba nomo al la valoro de la unua argumento ($ 1), kaj tiam voku la vortan kalkulecon ( wc ) sur ĉi tiu variablo ($ FILE1).

Se vi havas diversan numeron de argumentoj, vi povas uzi la "$ @" variablo, kiu estas aro de ĉiuj enmetaj parametroj. Ĉi tio signifas, ke vi povas uzi por-buklo por ripeti ĝin ĉiufoje, kiel ĝi ilustras en la sekva ekzemplo:

por FILE1 en "$ @" faru $ FILE1 farita

Jen ekzemplo de kiel nomi ĉi tiun skripton per argumentoj de la komandlinio:

sh stats.sh songlist1 songlist2 songlist3

Se argumento havas spacojn, vi devas enŝovi ĝin per simplaj citaĵoj. Ekzemple:

sh stats.sh 'kantlistlisto 1' 'kantlistlisto 2' 'Kantistoleko 3'

Ofte skriba skripto estas tia, ke la uzanto povas pasi argumentojn en iu ajn ordo uzante flagojn. Kun la metodo de la flagoj, vi ankaŭ povas fari iujn el la argumentoj laŭvolaj.

Lasu diri, ke vi havas skripton, kiu ricevas informon de datumbazo bazita sur specifaj parametroj, kiel "uzantnomo", "dato" kaj "produkto", kaj generas raporton en specifa "formato". Nun vi volas skribi vian skripton por ke vi povu pasi ĉi tiujn parametrojn kiam la skripto estas nomita. Eble aspektas tiel:

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

Bash ebligas ĉi tiun funkcion kun la "getopts" funkcio. Por la supra ekzemplo, vi povus uzi getopts kiel sekvas:

Ĉi tiu estas tempo-buklo kiu uzas la "getopts" funkcion kaj nomitan "optstringo", en ĉi tiu kazo "u: d: p: f:", por ripeti la argumentojn. La tempo-buklo trairas la optstringon, kiu enhavas la flagojn, kiuj povas esti uzataj por pasi argumentojn kaj asignas la argumentan valoron provizitan por tiu flago al la variablo "opcio". La kazo-deklaro tiam atribuas la valoron de la variablo "opcio" al tutmonda variablo, kiu povas uzi post ĉiuj argumentoj.

La kolonoj en la optstringo signifas, ke valoroj estas bezonataj por la respondaj flagoj. En la supra ekzemplo ĉiuj flagoj sekvas kolonon: "u: d: p: f:". Ĉi tio signifas, ĉiuj flagoj bezonas valoron. Se, ekzemple, la "d" kaj "f" flagoj ne atendis havi valoron, la optstringo estus "u: dp: f".

Kolono ĉe la komenco de la elektilo, ekzemple ": u: d: p: f:", havas tute malsaman signifon. Ĝi ebligas al vi manipuli flagojn, kiuj ne estas reprezentitaj en la optstringo. En tiu kazo la valoro de la "opcio" variablo estas fiksita al "?" kaj la valoro de "OPTARG" estas fiksita al la neatendita flago. Ĝi ebligas al vi montri taŭgan eraran mesaĝon informante al la uzanto de la eraro.

Argumentoj, kiuj ne antaŭas flagon, estas ignoritaj de getopts. Se la flagoj specifitaj en la optstringo ne estas provizitaj kiam la skripto estas vokita, nenio okazas, krom se vi speciale traktas ĉi tiun kazon en via kodo. Ajna argumentoj ne manipulitaj de kupoloj ankoraŭ povas esti kaptitaj per regulaj $ 1, $ 2, ktp variabloj.