Sut i Drosglwyddo Dadleuon i Sgript Bash

Gorchmynion, cystrawen ac enghreifftiau

Gallwch ysgrifennu sgript bash fel ei bod yn derbyn dadleuon a bennir pan gelwir y sgript o'r llinell orchymyn. Defnyddir y dull hwn pan mae'n rhaid i sgript berfformio swyddogaeth ychydig yn wahanol yn dibynnu ar werthoedd paramedrau mewnbwn (y dadleuon).

Er enghraifft, efallai bod gennych sgript o'r enw "stats.sh" sy'n perfformio gweithrediad penodol ar ffeil, megis cyfrif ei eiriau. Os ydych chi am allu defnyddio'r sgript honno ar lawer o ffeiliau, mae'n well pasio'r enw ffeil fel dadl, fel y gallwch ddefnyddio'r un sgript ar gyfer prosesu'r holl ffeiliau. Er enghraifft, os enw'r ffeil sydd i'w brosesu yw "rhestr gân", byddech yn cofnodi'r llinell orchymyn canlynol:

Rhestr caneuon sh stats.sh

Mae dadleuon ar gael o fewn sgript gan ddefnyddio'r newidynnau $ 1, $ 2, $ 3, ac ati, lle mae $ 1 yn cyfeirio at y ddadl gyntaf, $ 2 i'r ail ddadl, ac yn y blaen. Dangosir hyn yn yr enghraifft ganlynol:

FILE1 = $ 1 wc $ FILE1

I ddarllenadwyedd, rhowch newidyn gydag enw disgrifiadol i werth y ddadl gyntaf ($ 1), ac yna ffoniwch y cyfleustodau cyfrif geiriau ( wc ) ar y newidyn hwn ($ FILE1).

Os oes gennych nifer amrywiol o ddadleuon, gallwch ddefnyddio'r newidyn "$ @", sy'n gyfres o bob paramedr mewnbwn. Mae hyn yn golygu y gallwch ddefnyddio proses for-dolen i brosesu pob un o'r rhain, fel y dangosir yn yr enghraifft ganlynol:

ar gyfer FILE1 yn "$ @" gwnaed $ FILE1

Dyma enghraifft o sut i alw'r sgript hon gyda dadleuon o'r llinell orchymyn:

sh stats.sh songlist1 songlist2 songlist3

Os oes lle i ddadl, mae angen i chi ei hamgáu gyda dyfynbrisiau sengl. Er enghraifft:

sh stats.sh 'rhestr gân 1' 'songlist 2' 'rhestr gân 3'

Yn aml, ysgrifennir sgript fel y gall y defnyddiwr ddadleuon mewn unrhyw orchymyn gan ddefnyddio baneri. Gyda'r dull baneri, gallwch hefyd wneud rhai o'r dadleuon yn ddewisol.

Gadewch i chi ddweud bod gennych sgript sy'n adfer gwybodaeth o gronfa ddata yn seiliedig ar baramedrau penodedig, megis "enw defnyddiwr", "dyddiad", a "chynnyrch", ac mae'n cynhyrchu adroddiad mewn "fformat" penodol. Nawr, rydych chi am ysgrifennu eich sgript fel y gallwch chi drosglwyddo'r paramedrau hyn pan gelwir y sgript. Efallai y bydd yn edrych fel hyn:

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

Mae Bash yn galluogi'r swyddogaeth hon gyda'r swyddogaeth "getopts". Ar gyfer yr enghraifft uchod, gallech ddefnyddio getopts fel a ganlyn:

Mae hon yn darn trac sy'n defnyddio'r swyddogaeth "getopts" a "optstring" fel y'i gelwir, yn yr achos hwn "u: d: p: f:", i anwybyddu drwy'r dadleuon. Mae'r teithiau trac-dolen drwy'r optstring, sy'n cynnwys y baneri y gellir eu defnyddio i basio dadleuon, ac yn aseinio'r gwerth dadl a ddarperir ar gyfer y faner honno i'r "opsiwn" amrywiol. Yna mae'r datganiad achos yn aseinio gwerth yr "opsiwn" amrywiol i newidyn byd-eang a all ddefnyddio ar ôl i'r holl ddadleuon gael eu darllen.

Mae'r colons yn yr optstring yn golygu bod angen gwerthoedd ar gyfer y baneri cyfatebol. Yn yr enghraifft uchod, dilynir pob baner gan colon: "u: d: p: f:". Mae hyn yn golygu bod angen gwerth ar bob baner. Os, er enghraifft, ni ddisgwylir i'r bandiau "d" a "f" gael gwerth, byddai'r optstring yn: dp: f ".

Mae colon ar ddechrau'r optstring, er enghraifft ": u: d: p: f:", mae ystyr hollol wahanol. Mae'n eich galluogi i ddelio â baneri nad ydynt wedi'u cynrychioli yn yr optstring. Yn yr achos hwnnw, mae gwerth y newidyn "opsiwn" wedi'i osod i "?" ac mae gwerth "OPTARG" wedi'i osod i'r faner annisgwyl. Mae'n eich galluogi i arddangos neges gwall addas sy'n hysbysu'r defnyddiwr o'r camgymeriad.

Anwybyddir dadleuon nad yw baner yn eu hwynebu gan getopts. Os na ddarperir baneri a bennir yn yr optstring pan gaiff y sgript ei alw, does dim byd yn digwydd, oni bai eich bod yn trin yr achos hwn yn arbennig yn eich cod. Gellir dal unrhyw ddadleuon nad ydynt yn cael eu trin gan gwnstabl yn dal gyda'r newidynnau rheolaidd $ 1, $ 2, ac ati.