Hvernig á að fara fram á rökum við Bash-Script

Skipanir, setningafræði og dæmi

Þú getur skrifað bash handrit þannig að það fái rök sem er tilgreint þegar handritið er kallað úr stjórn línunnar. Þessi aðferð er notuð þegar handritið þarf að framkvæma svolítið mismunandi virkni eftir því sem gildir inntaksbreytur (rökin).

Til dæmis getur verið að þú hafir handrit sem heitir "stats.sh" sem framkvæma tiltekna aðgerð á skrá, svo sem að telja orðin. Ef þú vilt vera fær um að nota þessi handrit í mörgum skrám, er best að senda skráarnöfnina sem rök, svo að þú getir notað sama handrit fyrir allar skrárnar sem á að vinna. Til dæmis, ef nafnið á skránni sem á að vinna er "lagalista", þá myndi þú slá inn eftirfarandi skipanalínu:

sh stats.sh lagalista

Gögn eru aðgengileg inni í handriti með því að nota breyturnar $ 1, $ 2, $ 3, osfrv, þar sem $ 1 vísar til fyrsta rökanna, $ 2 í seinni rifrildi, og svo framvegis. Þetta er sýnt í eftirfarandi dæmi:

FILE1 = $ 1 wc $ FILE1

Til að hægt sé að lesa, veldu breytu með lýsandi heiti að verðmæti fyrsta rifrunnar ($ 1) og hringdu síðan í orðatiltakið ( wc ) á þessari breytu ($ FILE1).

Ef þú hefur breytilegan fjölda arguments getur þú notað "$ @" breytu, sem er fjöldi allra innsláttarbreytu. Þetta þýðir að þú getur notað for-lykkju til að meðhöndla það í hvert skipti, eins og sýnt er í eftirfarandi dæmi:

fyrir FILE1 í "$ @" gera wc $ FILE1 gert

Hér er dæmi um hvernig á að hringja í þetta handrit með rökum frá stjórn línunnar:

sh stats.sh songlist1 songlist2 songlist3

Ef rifrildi hefur rými, verður þú að láta hana fylgja með einni tilvitnun. Til dæmis:

sh stats.sh 'lagalista 1' 'lagalista 2' 'sönglista 3'

Oft er handrit skrifað þannig að notandinn geti farið framhjá rökum í hvaða röð sem er með því að nota fánar. Með fánaraðferðinni geturðu einnig gert eitthvað af rökunum valfrjálst.

Segðu að þú hafir handrit sem sækir upplýsingar úr gagnagrunni sem byggist á tilteknum þáttum, svo sem "notendanafn", "dagsetningu" og "vöru" og býr til skýrslu í tilteknu formi. Nú viltu skrifa handritið þitt svo að þú getir farið í þessar breytur þegar handritið er kallað. Það kann að líta svona út:

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

Bash gerir þessa virkni með "getopts" virka. Fyrir dæmi hér að ofan gætirðu notað getopts sem hér segir:

Þetta er tímabundið lykkja sem notar "getopts" virka og svokallaða "optstring", í þessu tilfelli "u: d: p: f:", til að endurtekna með rökunum. The meðan-lykkja gengur í gegnum upptökuna, sem inniheldur fánar sem hægt er að nota til að fara framhjá rökum, og gefur rökargildi fyrir þann fána til breytu "valkost". Case-yfirlýsingin gefur síðan gildi breytu "valkost" við alþjóðlegt breytu sem hægt er að nota eftir að öll rökin hafa verið lesin.

The colons í optstring meina að gildi eru nauðsynleg fyrir samsvarandi fánar. Í dæminu hér að framan eru allir fánar fylgt eftir með ristli: "u: d: p: f:". Þetta þýðir að allir fánar þurfa að vera verðmæti. Ef til dæmis "d" og "f" fánar væru ekki búnir að hafa gildi, þá væri upptökan "u: dp: f".

A ristill í upphafi upptökunnar, til dæmis ": u: d: p: f:", hefur allt öðruvísi merkingu. Það gerir þér kleift að takast á við fánar sem eru ekki fulltrúa í upptökunni. Í því tilviki er gildi "valkostur" breytu stillt á "?" og gildi "OPTARG" er stillt á óvænta fánann. Það gerir þér kleift að birta viðeigandi villuboð sem upplýsir notandann um mistökin.

Rök sem eru ekki á undan fáni eru hunsuð af getopts. Ef fánar sem eru tilgreindar í upptökunni eru ekki veittar þegar handritið er kallað, gerist ekkert, nema þú sért sérstaklega með þetta mál í kóðanum þínum. Allir rök sem ekki eru meðhöndluð með getops geta samt verið teknar með venjulegum $ 1, $ 2, osfrv. Breytur.