Jinsi ya Kupitisha Majadiliano kwenye Bash-Script

Maagizo, syntax na mifano

Unaweza kuandika script ya bash kama inapokea hoja zilizoelezwa wakati script iitwayo kutoka mstari wa amri. Njia hii inatumiwa wakati script inafanya kazi tofauti tofauti kulingana na maadili ya vigezo vya uingizaji (hoja).

Kwa mfano, unaweza kuwa na script inayoitwa "stats.sh" ambayo hufanya operesheni fulani kwenye faili, kama kuhesabu maneno yake. Ikiwa unataka kuwa na uwezo wa kutumia script hiyo kwenye faili nyingi, ni vizuri kupitisha jina la faili kama hoja, ili uweze kutumia script hiyo kwa faili zote zinazopaswa kusindika. Kwa mfano, ikiwa jina la faili kutafutwa ni "orodha ya nyimbo", ungependa kuingia mstari wa amri ifuatayo:

Orodha ya nyimbo ya sh st.sh

Majadiliano yanapatikana ndani ya script kwa kutumia vigezo $ 1, $ 2, $ 3, nk, ambapo $ 1 inahusu hoja ya kwanza, $ 2 kwa hoja ya pili, na kadhalika. Hii inaonyeshwa katika mfano wafuatayo:

FILE1 = $ 1 wc $ FILE1

Kwa usomaji, toa tofauti na jina linaloelezea kwa thamani ya hoja ya kwanza ($ 1), halafu piga simu ya utumiaji wa neno ( wc ) kwenye variable hii ($ FILE1).

Ikiwa una idadi ya kutofautiana ya hoja, unaweza kutumia "$ @" variable, ambayo ni safu ya vigezo vyote vya uingizaji. Hii ina maana unaweza kutumia kitanzi kwa mchakato wa kutafsiri kila mmoja, kama ilivyoonyeshwa katika mfano wafuatayo:

kwa FILE1 katika "$ @" fanya $ FILE1 iliyofanywa

Hapa ni mfano wa jinsi ya kuiita script hii na hoja kutoka mstari wa amri:

orodha ya wimbo wa nyimbo song12 orodha ya nyimbo3

Ikiwa hoja ina nafasi, unahitaji kuifunga nayo kwa quotes moja. Kwa mfano:

Orodha ya nyimbo ya 'stats.sh' '' orodha ya nyimbo 2 '' orodha ya nyimbo 3 '

Mara kwa mara script imeandikwa kama mtumiaji anaweza kupitisha kwa hoja yoyote kwa kutumia bendera. Kwa njia ya bendera, unaweza pia kufanya baadhi ya hoja za hiari.

Hebu sema una script ambayo inapata maelezo kutoka kwenye daraka kulingana na vigezo maalum, kama vile "jina la mtumiaji", "tarehe", na "bidhaa", na hutoa ripoti katika "muundo" maalum. Sasa unataka kuandika script yako ili uweze kupitisha katika vigezo hivi wakati script inavyoitwa. Inaweza kuonekana kama hii:

makereport -s jsmith -p daftari -d 10-20-2011 -f pdf

Bash inawezesha utendaji huu na kazi ya "getopts". Kwa mfano hapo juu, unaweza kutumia upya kama ifuatavyo:

Huu ni kitanzi cha wakati kinachotumia kazi ya "getopts" na kinachoitwa "optstring", katika kesi hii "u: d: p: f:", ili upate kupitia hoja. Kipindi hicho kinatembea kwa njia ya optstring, ambayo ina bendera ambayo inaweza kutumika kupitisha hoja, na inatoa thamani ya hoja iliyotolewa kwa bendera hiyo kwa "chaguzi" ya kutofautiana. Taarifa ya kesi hiyo inachukua thamani ya "chaguo" ya kutofautiana kwa variable ya kimataifa ambayo inaweza kutumika baada ya hoja zote zimehesabiwa.

Wacons katika optstring inamaanisha kwamba maadili yanatakiwa kwa bendera zinazofanana. Katika mfano hapo juu bendera zote zinafuatiwa na koloni: "u: d: p: f:". Hii ina maana, bendera zote zinahitaji thamani. Ikiwa, kwa mfano, bendera za "d" na "f" hazikutarajiwa kuwa na thamani, optstring ingekuwa "u: dp: f".

Kipoloni mwanzoni mwa optstring, kwa mfano ": u: d: p: f:", ina maana tofauti kabisa. Inakuwezesha kushughulikia bendera ambazo haziwakilishwa katika optstring. Katika hali hiyo thamani ya "chaguo" ya kutofautiana imewekwa "?" na thamani ya "OPTARG" imewekwa kwenye bendera isiyoyotarajiwa. Inakuwezesha kuonyesha ujumbe sahihi wa kosa kumjulisha mtumiaji wa kosa.

Majadiliano yasiyoyotanguliwa na bendera yanapuuzwa na getopts. Ikiwa bendera zilizochaguliwa katika optstring hazijatolewa wakati script inavyoitwa, hakuna kinachotokea, isipokuwa wewe kushughulikia kesi hii kwa msimbo wako. Masuala yoyote ambayo hayashughulikiwa na getops bado yanaweza kuletwa kwa kawaida ya $ 1, $ 2, nk.