Si t'i kalosh argumentet një Bash-Script

Komandat, sintaksë dhe shembuj

Ju mund të shkruani një script bash kështu që merr argumente të specifikuara kur skriptimi thirret nga rreshti i komandës. Kjo metodë përdoret kur një skriptë duhet të kryejë një funksion paksa të ndryshëm në varësi të vlerave të parametrave të hyrjes (argumentet).

Për shembull, mund të keni një skript të quajtur "stats.sh" që kryen një operacion të caktuar në një skedar, të tilla si numërimi i fjalëve të tij. Nëse dëshironi të jeni në gjendje të përdorni atë skript në shumë skedarë, është më mirë të kaloni emrin e skedarit si argument, në mënyrë që të përdorni të njëjtin skript për të gjitha skedarët që do të përpunohen. Për shembull, nëse emri i skedarit që do të përpunohet është "lista e këngëve", do të futni vijën e mëposhtme të komandës:

sh stats.sh listën e këngëve

Argumentet arrihen brenda një shkrimi duke përdorur variabla $ 1, $ 2, $ 3, etj, ku $ 1 i referohet argumentit të parë, $ 2 në argumentin e dytë dhe kështu me radhë. Kjo ilustrohet në shembullin vijues:

FILE1 = $ 1 wc $ FILE1

Për lexueshmëri, caktoni një ndryshore me një emër përshkrues në vlerën e argumentit të parë ($ 1), dhe pastaj telefononi shërbimin e numërimit të fjalëve ( wc ) në këtë variabël ($ FILE1).

Nëse keni numër të ndryshueshëm argumente, mund të përdorni variablën "$ @", e cila është një grup i të gjithë parametrave të hyrjes. Kjo do të thotë që ju mund të përdorni një for-loop për të procesuar iterativisht secilin, siç ilustrohet në shembullin e mëposhtëm:

për FILE1 në "$ @" bëni wc $ FILE1 bërë

Këtu është një shembull se si ta quajmë këtë skript me argumente nga rreshti i komandës:

sh stats.sh songlist1 songlist2 songlist3

Nëse një argument ka hapësira, duhet të bashkangjitni atë me kuota të vetme. Për shembull:

sh stats.sh 'songlist 1' 'songlist 2' 'lista e këngëve 3'

Shpesh një shkrim është shkruar kështu që përdoruesi mund të kalojë në argumente në çdo mënyrë duke përdorur flamujt. Me metodën e flamujve, gjithashtu mund të bëni disa nga argumentet opsionale.

Lejoni të keni një skript që rikthen informacionin nga një bazë të dhënash bazuar në parametrat e caktuar, si "emri i përdoruesit", "data" dhe "produkti", dhe gjeneron një raport në një "format" të specifikuar. Tani doni të shkruani skenarin tuaj në mënyrë që të kaloni në këto parametra kur thirret skripti. Mund të duket kështu:

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

Bash mundëson këtë funksionalitet me funksionin "getopts". Për shembullin e mësipërm, ju mund të përdorni getopts si më poshtë:

Kjo është një kohë loop që përdor funksionin "getopts" dhe një të ashtuquajtur "optstring", në këtë rast "u: d: p: f:", për të përsëritur përmes argumenteve. Kur loop ecën nëpër optstring, e cila përmban flamuj që mund të përdoren për të kaluar argumente, dhe cakton vlerën e argumentit të dhënë për atë flamur në variablin "opsion". Deklarata e rastit pastaj cakton vlerën e "opsionit" të ndryshores në një ndryshore globale që mund të përdoret pasi të jenë lexuar të gjitha argumentet.

Kolonat në optstring do të thotë se vlerat janë të nevojshme për flamujt përkatës. Në shembullin e mësipërm të gjithë flamuj pasohen nga një zorrë e trashë: "u: d: p: f:". Kjo do të thotë, të gjitha flamuj kanë nevojë për një vlerë. Nëse, për shembull, flamuj "d" dhe "f" nuk pritej të kishin një vlerë, optstring do të ishte "u: dp: f".

Një zorrës së trashë në fillim të optstring, për shembull ": u: d: p: f:", ka një kuptim krejtësisht të ndryshme. Kjo ju lejon të merreni me flamuj që nuk janë të përfaqësuar në optstring. Në këtë rast vlera e variablit "opsion" është vendosur në "?" dhe vlera e "OPTARG" është vendosur në flamurin e papritur. Ju lejon të shfaqni një mesazh gabimi të përshtatshëm për informimin e përdoruesit për gabimin.

Argumentet që nuk paraprihen nga një flamur injorohen nga getopts. Nëse flamurët e specifikuar në optstring nuk ofrohen kur thirret skripti, asgjë nuk ndodh, përveç nëse ju e trajtoni posaçërisht këtë rast në kodin tuaj. Çdo argument që nuk trajtohet nga getops ende mund të kapet me variablat e rregullt $ 1, $ 2, etj.