Gabay ng Nagsisimula Upang BASH - Mga Parameter sa Pag-input

Maligayang pagdating sa ika-2 bahagi ng Gabay ng Nagsisimula Upang BASH serye na natatangi sa na ito ay ang tanging BASH tutorial na isinulat ng isang baguhan para sa mga nagsisimula.

Ang mga mambabasa ng patnubay na ito ay magtatayo ng kanilang kaalaman habang itinatayo ko ang aking kaalaman at sana sa dulo ng lahat ay makakapagsulat kami ng mga medyo matalino na mga script.

Noong nakaraang linggo ay sakop ko ang paglikha ng iyong unang script na ipinapakita lamang ang mga salitang "Hello World". Sinasaklaw nito ang mga paksa tulad ng mga editor ng teksto, kung paano buksan ang isang window ng terminal, kung saan ilalagay ang iyong mga script, kung paano maipakita ang mga salitang "Hello World" at ilang mga mas mahusay na mga puntos sa mga character ng escape tulad ng mga quotes ("").

Sa linggong ito ako ay sasakop sa mga parameter ng input. May iba pang mga gabay na nagtuturo sa ganitong uri ng bagay ngunit nalaman ko na sila ay lumipat sa ilang mga bagay na medyo mababa ang antas at maaaring magbigay ng napakaraming impormasyon.

Ano ang Parameter?

Sa "Hello World" na script mula sa huling tutorial na ito ay lahat ng napaka-static. Ang script ay hindi tunay na gawin magkano sa lahat.

Paano namin mapapabuti ang script na "Hello World"?

Kumusta naman ang isang script na nagpapadala sa taong nagpapatakbo nito? Sa halip na magsabi ng "Hello World" sasabihin nito ang "Hello Gary", "Hello Tim" o "Hello Dolly".

Kung wala ang kakayahang tanggapin ang mga parameter ng input kailangan naming isulat ang tatlong mga script na "hellogary.sh", "hellotim.sh" at "hellodolly.sh".

Sa pamamagitan ng pagpapahintulot sa aming script na magbasa ng mga parameter ng input maaari naming gamitin ang isang script upang batiin ang sinuman.

Upang gawin ito buksan ang isang terminal window (CTRL + ALT + T) at mag-navigate sa iyong mga folder ng script sa pamamagitan ng pag-type ng mga sumusunod: ( tungkol sa cd command )

cd script

Gumawa ng isang bagong script na tinatawag na greetme.sh sa pamamagitan ng pag-type ng mga sumusunod: ( tungkol sa ugnay command )

pindutin ang greetme.sh

Buksan ang script sa iyong paboritong editor sa pamamagitan ng pag-type ng sumusunod: ( tungkol sa nano command )

nano greetme.sh

Ipasok ang sumusunod na teksto sa loob ng nano:

#! / bin / bash echo "hello $ @"

Pindutin ang CTRL at O ​​upang i-save ang file at pagkatapos CTRL at X upang isara ang file.

Upang patakbuhin ang script ipasok ang sumusunod sa command line na pinapalitan ng iyong pangalan.

sh greetme.sh

Kung patakbuhin ko ang script sa aking pangalan ipinapakita nito ang mga salitang "Hello Gary".

Ang unang linya ay ang #! / Bin / bash line na ginagamit upang matukoy ang file bilang isang script ng bash.

Ang ikalawang linya ay gumagamit ng echo statement upang echo ang salitang hello at pagkatapos ay mayroong kakaibang $ @ notasyon. ( tungkol sa echo command )

Ang $ @ ay nagpapalawak upang ipakita ang bawat parameter na ipinasok kasama ng pangalan ng script. Kaya kung nag-type ka ng "sh greetme.sh team" ang mga salitang "hello team" ay ipapakita. Kung nag-type ka ng "greetme.sh tim smith" pagkatapos ang mga salitang "hello tim smith" ay ipapakita.

Maaaring maging mabait para sa greetme.sh script na sabihin lamang kumusta gamit lamang ang unang pangalan. Walang sinuman ang nagsasabing "hello gary newell" kapag nakilala nila ako, maaari nilang sabihin "hello gary" bagaman.

Baguhin natin ang script upang gamitin lamang ang unang parameter. Buksan ang script na greetme.sh sa nano sa pamamagitan ng pag-type ng mga sumusunod:

nano greetme.sh

Baguhin ang script upang mabasa nito ang mga sumusunod:

#! / bin / bash echo "kumusta $ 1"

I-save ang script sa pamamagitan ng pagpindot sa CTRL at O ​​at pagkatapos ay lumabas sa pamamagitan ng pagpindot sa CTRL at X.

Patakbuhin ang script tulad ng ipinapakita sa ibaba (palitan ang pangalan ko sa iyo):

sh greetme.sh gary newell

Kapag nagpatakbo ka ng script na ito ay sasabihin lang "halo gary" (o sana ay "halo" at anuman ang pangalan mo.

Ang 1 pagkatapos ng $ simbolo ay karaniwang nagsasabi sa echo na utos, gamitin ang unang parameter. Kung palitan mo ang $ 1 na may $ 2, ipapakita nito ang "hello newell" (o anuman ang iyong apelyido).

Nagkataon kung pinalitan mo ang $ 2 na may isang $ 3 at pinatakbo ang script na may 2 mga parameter lamang ang output ay magiging "Hello".

Posible upang ipakita at panghawakan ang bilang ng mga parameter na aktwal na ipinasok at sa mga susunod na tutorial ay ipapakita ko kung paano gamitin ang parameter na bilang para sa mga layunin ng pagpapatunay.

Upang maipakita ang bilang ng mga parameter na ipinasok buksan ang greetme.sh script (nano greetme.sh) at baguhin ang teksto tulad ng sumusunod:

#! / bin / bash echo "ipinasok mo ang $ # mga pangalan" echo "kumusta $ @"

Pindutin ang CTRL at O ​​upang i-save ang script at CTRL at X upang lumabas sa nano.

Ang $ # sa ika-2 na linya ay nagpapakita ng bilang ng mga parameter na ipinasok.

Sa ngayon ang lahat ng ito ay nobela ngunit hindi masyadong kapaki-pakinabang. Sino ang nangangailangan ng isang script na nagpapakita lamang ng "halo"?

Ang tunay na paggamit para sa echo na mga pahayag ay upang magbigay ng masalita at makabuluhang output sa user. Kung maaari mong isipin na nais mong gumawa ng isang bagay na kumplikado na nagsasangkot ng ilang mga malubhang crunching numero at pagmamanipula ng file / folder magiging kapaki-pakinabang upang ipakita sa user kung ano ang nangyayari sa bawat hakbang ng paraan.

Sa kabaligtaran, ang mga parameter ng pag-input ay ginagawa ang iyong script na interactive. Kung wala ang mga parameter ng pag-input, kakailanganin mo ng dose-dosenang mga script ang lahat ng paggawa ng mga katulad na bagay ngunit may bahagyang iba't ibang mga pangalan.

Sa lahat ng ito sa isip may ilang iba pang mga kapaki-pakinabang na mga parameter ng input na ito ay isang magandang ideya na malaman at isasama ko ang mga ito sa lahat sa isang code snippet.

Buksan ang iyong greetme.sh script at baguhin ito tulad ng sumusunod:

#! / bin / bash echo "Filename: $ 0" echo "ID ng Proseso: $ $" echo "---------------------------- --- "echo" ipinasok mo $ # mga pangalan "echo" kumusta $ @ "

Pindutin ang CTRL at O ​​upang i-save ang file at CTRL at X upang lumabas.

Ngayon Patakbuhin ang script (palitan gamit ang iyong pangalan).

sh greetme.sh

Sa oras na ito ay ipinapakita ng script ang mga sumusunod:

Filename: greetme.sh Proseso ng ID: 18595 ------------------------------ naipasok mo ang 2 mga pangalan hello gary newell

Ang $ 0 sa unang linya ng script ay nagpapakita ng pangalan ng script na iyong pinapatakbo. Tandaan na ito ay dollar zero at hindi dollar o.

Ang $$ sa ikalawang linya ay nagpapakita ng proseso ng id ng script na iyong tumatakbo. Bakit ito kapaki-pakinabang? Kung nagpapatakbo ka ng isang script sa foreground maaari mong kanselahin ito sa pamamagitan lamang ng pagpindot sa CTRL at C. Kung pinatakbo mo ang script sa background at nagsimula itong looping at ginagawa ang parehong bagay nang paulit-ulit o nagsimula na nagdudulot ng pinsala sa iyong system na kakailanganin mo upang patayin ito.

Upang patayin ang isang script na tumatakbo sa background kailangan mo ang proseso ng id ng script. Hindi ba ito magiging mabuti kung binigyan ng script ang proseso ng id bilang bahagi ng output nito. ( tungkol sa PS at pumatay ng mga utos )

Sa wakas bago ko tapusin ang paksang ito nais kong talakayin ang tungkol sa kung saan napupunta ang output. Sa bawat oras na ang script ay tumakbo sa ngayon ang output ay ipinapakita sa screen.

Ito ay karaniwang para sa output ng script na nakasulat sa isang output file. Upang gawin ito patakbuhin ang iyong script tulad ng sumusunod:

sh greetme.sh gary> greetme.log

Ang simbolo sa utos sa itaas ay nagpapalabas ng tekstong "hello gary" sa isang file na tinatawag na greetme.log.

Sa bawat oras na patakbuhin mo ang script gamit ang> simbolo na ito ay patungan ang mga nilalaman ng output file. Kung gusto mong ilakip sa file palitan ang> may >>.

Buod

Dapat ka na ngayong makapagsulat ng teksto sa screen at tanggapin ang mga parameter ng input.