Paano Ipasa ang mga Argumento sa isang Bash-Script

Mga utos, syntax at mga halimbawa

Maaari kang magsulat ng isang script ng bash tulad na natatanggap nito ang mga argumento na tinukoy kapag ang script ay tinatawag mula sa command line. Ang pamamaraang ito ay ginagamit kapag ang isang script ay upang magsagawa ng isang bahagyang iba't ibang mga function depende sa mga halaga ng mga parameter ng input (ang mga argumento).

Halimbawa, maaari kang magkaroon ng isang script na tinatawag na "stats.sh" na gumaganap ng isang partikular na operasyon sa isang file, tulad ng pagbilang ng mga salita nito. Kung gusto mong magamit ang script na iyon sa maraming mga file, pinakamahusay na ipasa ang pangalan ng file bilang isang argument, upang maaari mong gamitin ang parehong script para ma-proseso ang lahat ng mga file. Halimbawa, kung ang pangalan ng file na naproseso ay "songlist", ipapasok mo ang sumusunod na command line:

sh stats.sh songlist

Ang mga argumento ay na-access sa loob ng isang script gamit ang mga variable na $ 1, $ 2, $ 3, atbp, kung saan ang $ 1 ay tumutukoy sa unang argument, $ 2 sa pangalawang argument, at iba pa. Ito ay inilalarawan sa sumusunod na halimbawa:

FILE1 = $ 1 wc $ FILE1

Para sa pagiging madaling mabasa, magtalaga ng variable na may pangalan na naglalarawan sa halaga ng unang argument ($ 1), at pagkatapos ay tawagan ang word count utility ( wc ) sa variable na ito ($ FILE1).

Kung mayroon kang isang variable na bilang ng mga argumento, maaari mong gamitin ang variable na "$ @", na isang array ng lahat ng mga parameter ng input. Nangangahulugan ito na maaari mong gamitin ang isang for-loop upang i-proseso nang iisa ang bawat isa, tulad ng isinalarawan sa sumusunod na halimbawa:

para sa FILE1 sa "$ @" gawin wc $ FILE1 tapos na

Narito ang isang halimbawa kung paano tawagan ang script na ito gamit ang mga argumento mula sa command line:

sh stats.sh songlist1 songlist2 songlist3

Kung ang isang argument ay may mga espasyo, kailangan mong ilakip ito sa mga solong quotes. Halimbawa:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Madalas na isang script ay nakasulat na tulad na ang user ay maaaring pumasa sa mga argumento sa anumang order gamit ang mga flag. Gamit ang mga paraan ng flag, maaari ka ring gumawa ng ilan sa mga argumento na opsyonal.

Sabihin nating mayroon kang isang script na kumukuha ng impormasyon mula sa isang database batay sa tinukoy na mga parameter, tulad ng "username", "petsa", at "produkto", at bumubuo ng isang ulat sa isang tinukoy na "format". Ngayon nais mong isulat ang iyong script upang maaari mong ipasa sa mga parameter na ito kapag ang script ay tinatawag na. Maaaring ganito ang ganito:

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

Pinapayagan ng Bash ang pag-andar na ito gamit ang function na "getopts." Para sa halimbawa sa itaas, maaari mong gamitin ang getopts tulad ng sumusunod:

Ito ay isang habang-loop na gumagamit ng "getopts" function at isang tinatawag na "optstring", sa kasong ito "u: d: p: f:", upang umulit sa pamamagitan ng mga argumento. Ang habang-loop ay lumalakad sa pamamagitan ng optstring, na naglalaman ng mga flag na maaaring magamit upang pumasa sa mga argumento, at nagtatalaga ng halaga ng argument na ibinigay para sa flag na iyon sa variable na "option". Ang kaso-pahayag ay nagtatalaga ng halaga ng variable na "opsyon" sa isang pandaigdigang variable na magagamit pagkatapos na mabasa ang lahat ng mga argumento.

Ang mga colon sa optstring ay nangangahulugan na ang mga halaga ay kinakailangan para sa kaukulang mga flag. Sa halimbawa sa itaas ang lahat ng mga flag ay sinundan ng colon: "u: d: p: f:". Ang ibig sabihin nito, ang lahat ng mga bandila ay nangangailangan ng isang halaga. Kung, halimbawa, ang mga "d" at "f" na mga flag ay hindi inaasahan na magkaroon ng isang halaga, ang opt ay magiging "u: dp: f".

Ang isang colon sa simula ng optstring, halimbawa ": u: d: p: f:", ay may ganap na naiibang kahulugan. Pinapayagan ka nito na pangasiwaan ang mga flag na hindi kinakatawan sa optstring. Sa kasong iyon ang halaga ng variable ng "pagpipilian" ay nakatakda sa "?" at ang halaga ng "OPTARG" ay nakatakda sa hindi inaasahang bandila. Pinapayagan ka ng pagpapakita ng angkop na mensahe ng error na nagpapaalam sa gumagamit ng pagkakamali.

Ang mga pangangatwiran na hindi nauuna ng isang bandila ay hindi pinansin ng mga getopt. Kung ang mga flag na tinukoy sa optstring ay hindi ibinigay kapag ang script ay tinatawag na, walang mangyayari, maliban kung ikaw ay espesyal na pangasiwaan ang kasong ito sa iyong code. Ang anumang argumento na hindi hinahawakan ng mga getter ay maaari pa ring makuha sa regular na $ 1, $ 2, atbp. Mga variable.