Programming sa bash - bahagi 3

Sa ligtas aming konsepto Malalaman namin ang 2 napaka kapaki-pakinabang na tool para sa pag-program na ganap na gumagana sa Bash. Matutong gumawa mga function at tukuyin pipes maaaring mukhang kumplikado sa una, ngunit pagkatapos ay makikita natin ang napakalawak utilidad na nagbibigay sa amin.

Mga tubo

Partikular, at nang walang masyadong pag-ikot, ang isang pipeline ay isang pamamaraan na nagpapahintulot sa pagdidirekta ng output ng isang proseso bilang pag-input ng isa pa, na nagbibigay-daan sa isang serye ng mga pakinabang, tulad ng pagbawas ng mga linya ng code, pagbibigay ng mga variable ng imbakan para sa mga resulta at pagpapabuti ang kahusayan ng iskrip.

Ang isang tubo ay pangkalahatang kinikilala ng pagkakaroon ng simbolo | na nagbibigay-daan upang pagsamahin ang mga expression; Bagaman ginagamit ito bilang default, may iba pang mga paraan upang lumikha ng mga tubo.

Halimbawa: i-print ang mga kamakailang mensahe ng kernel

Pinapayagan ka ng #dmesg na tingnan ang mga kamakailang mensahe ng kernel at mai-load ang mga driver #during system boot; i-print ng buntot ang huling mga bahagi ng isang file o # order

dmesg | buntot

Bagaman maaari silang maging kumplikado hangga't gusto namin, ang pangunahing istraktura ng isang pipeline ay nagbibigay-daan sa resulta ng isang utos na magamit bilang input sa susunod, na maaaring magbigay ng input ng isang bagong utos kung patuloy kaming nagdaragdag ng magkakasunod na mga tubo.

Funciones

Ang mga pagpapaandar ay isang hanay ng mga pahayag na pinagsama-sama upang maisagawa ang mga ito nang maraming beses nang hindi na muling susulatin ang mga ito. Ito ay katumbas ng pag-iisip na kapag natututo kaming magluto ng isang uri ng pagkain isusulat namin ang resipe nito sa isang sheet, at sa tuwing nais naming lutuin ang pagkaing iyon ay kumunsulta kami sa resipe sa halip na muling pagsusulat ng isang bagong sheet na may parehong resipe.

Marahil ang pinakamahalagang bagay tungkol sa mga pagpapaandar ay ang posibilidad ng pagpasa ng mga parameter, data na gagamitin nila upang maproseso ang mga ito at makabuo ng isang output. Ang istraktura nito ay ang mga sumusunod:

pagpapaandar ng function-name {

proseso

}

Halimbawa: pagpapaandar na nagpapakita ng mga serbisyo na gumagana sa tcp protocol. Maaari rin nating makita kung paano mag-apply ng higit pang mga tubo.

# Tinutukoy namin ang isang pangalan ng pag-andar, maaaring ito ang gusto namin.

pagpapaandar ng mga serbisyo_tcp {

Nag-concatenate ang #cat at ipinapakita ang mga nilalaman ng / etc / services folder, na # na naglalaman ng lahat ng mga serbisyo sa kanilang mga nauugnay na port.

Ang # unang grep ay kumukuha ng listahan at aalisin ang mga komento, sa –v invert namin ang resulta

Ang # pangalawang grep ay nagpapakita lamang ng mga nauugnay sa tcp

pusa / etc / mga serbisyo | grep –v "^ #" | grep tcp

}

Kung kailangan nating isagawa ang pagpapaandar na ito kailangan lamang nating tawagan ito sa pangalan nito:

tcp_services

Sa kasong ito gumagana ito nang walang mga parameter; Sa kaganapan na mayroon sila ng mga ito, dapat nating idagdag ang mga ito upang ang paggana ay gumana nang maayos, kung hindi man ay hindi gagana ang paggana ng maayos. Ang paggamit ng pagbabalik ay nagbibigay-daan sa isang pagpapaandar upang ibalik ang isang halaga bilang isang resulta ng proseso.

Halimbawa: gumana sa mga input parameter na kinakalkula ang kabuuan ng 2 mga numero.

#! / bin / bash
kabuuan ng function ()
{
# sa pagpapaalam maaari nating maisagawa ang operasyon sa loob ng mga quote
hayaan ang "resulta = $ 1 + $ 2"

Pinapayagan ng #return na ibalik ang halaga ng integer. Kapag naipatupad na ang pagbalik, ilalagay ang halaga sa loob ng variable na $?
ibalik ang $ resulta;
}
 
Tinawag ang pagpapaandar ng kabuuan at ipinapasa namin ang 2 mga parameter ng pag-input.

magdagdag ng 2 3

# print ang halaga ng $? na may echo na sinusuri ang tunay na halaga ng variable sa mga quote
echo -e "Resulta = $?";

<< Pumunta sa nakaraang bahagi

Salamat Juan Carlos Ortiz!


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Nill pointer dijo

    Hindi ako sigurado, ngunit ang pahayag sa pagbabalik ng mga pag-andar ay ginagamit lamang upang ibalik ang isang integer sa pagitan ng 0 at 255, tulad ng mga error code ng "exit", sa pangkalahatan 0 kung ang lahat ay mabuti at ibang numero para sa iba pang mga kaso. Bagaman sa halimbawang ito ay gumagana, sa palagay ko hindi magandang kasanayan na ibalik ang resulta sa pagbabalik.
    Sa banda doon sinasabi kong kalokohan huh! mata! ha!

  2.   johnk dijo

    Ang katotohanan ay nag-iwan sa akin ng pag-aalinlangan. Sa anumang kaso, upang maiwasan ang mga problema sa mga pag-andar, maaari naming palitan ang pagbabalik ng echo sa kaganapan na ang function na naglalayong ibalik o i-print ang isang halaga o string.

  3.   Abel S. Mount Big dijo

    Ito ay totoo, upang malutas ito maaari mong gamitin ang utos ng bc, sa pag-andar ng kabuuan na maaari mong gamitin: resulta = `echo $ 1 + $ 2 | bc -ql`

  4.   Luis Miguel dijo

    mabuti,

    Nais kong malaman kung saan ko mai-save ang mga bash file upang patakbuhin ang malawak na system at hindi iyon ang direktoryo ng bin, ngunit maaaring maging tahanan sa pag-backup.

    Salamat at bumabati.

  5.   Joaquin dijo

    Maraming salamat, nagsisimula ako sa mga script, at ang totoo ay kapaki-pakinabang ito, napakabait mong pagbabahagi ng iyong kaalaman!
    Regards

    1.    gumamit tayo ng linux dijo

      Salamat! Yakap!
      Pablo

  6.   CRISTHIAN dijo

    Syntax error, hindi inaasahan
    Nakakuha ako ng isang error kapag sinusubukang patakbuhin ang halimbawa, kinopya ko ito nang eksaktong pareho

    Ano ang maaaring maging? nasa ubuntu 14.10 ako