Mga Gabay sa Nagsisimula Upang BASH - Mga Kundisyon At Mga Variable

Panimula

Maligayang pagdating sa ikatlong bahagi ng "Beginners Guide To BASH". Kung nawala mo ang nakaraang dalawang artikulo pagkatapos ay malamang na gusto mong malaman kung bakit ang gabay na ito ay naiiba sa iba pang mga gabay sa script ng BASH.

Ang gabay na ito ay isinulat ng isang kumpletong baguhan sa BASH at kaya bilang isang mambabasa na matutunan mo habang natututo ako. Habang ako ay isang baguhan sa BASH Ako ay nagmula sa isang software development background bagaman karamihan sa mga bagay na isinulat ko ay para sa platform ng Windows.

Maaari mong makita ang unang dalawang gabay sa pamamagitan ng pagbisita sa:

Kung ikaw ay bago sa BASH scripting inirerekumenda ko ang pagbabasa ng unang dalawang gabay bago magpatuloy sa isang ito.

Sa gabay na ito ay i-highlight ko kung paano gamitin ang mga kondisyong pahayag upang subukan ang pag-input ng user at kontrolin kung paano gumagana ang isang script.

I-install ang rsstail

Upang masunod ang gabay na ito, kakailanganin mong mag-install ng command line application na tinatawag na rsstail na ginagamit upang basahin ang RSS feed .

Kung gumagamit ka ng isang uri ng distribusyon batay sa Debian / Ubuntu / Mint ang sumusunod:

sudo apt-get install rsstail

Para sa Fedora / CentOS etc i-type ang mga sumusunod:

yum install rsstail

Para sa openSUSE i- type ang mga sumusunod:

zypper install rsstail

Ang KUNG pahayag

Buksan ang isang terminal at lumikha ng isang file na tinatawag na rssget.sh sa pamamagitan ng pag-type ng sumusunod:

sudo nano rssget.sh

Sa loob ng nano editor, ilagay ang sumusunod na teksto:

#! / bin / bash
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;

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

Patakbuhin ang script sa pamamagitan ng pag-type ng sumusunod:

sh rssget.sh

Ang script ay babalik sa isang listahan ng mga pamagat mula sa linux.about.com RSS feed.

Ito ay hindi isang labis na kapaki-pakinabang na script dahil ito lamang kinukuha ang mga pamagat mula sa isang RSS feed ngunit ito ay i-save ang kinakailangang tandaan ang path sa Linux.about.com RSS feed.

Buksan muli ang rssget.sh script sa nano at i-edit ang file upang tumingin tulad ng sumusunod:

#! / bin / bash

kung [$ 1 = "masalita"]
pagkatapos
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Patakbuhin muli ang script sa pamamagitan ng pag-type ng sumusunod:

sh rssget.sh verbose

Sa panahong ito ang RSS feed ay bumalik sa pamagat, link at paglalarawan.

Pag-aralan natin ang script sa isang piraso ng detalye:

Ang #! / Bin / bash ay lilitaw sa bawat script na isusulat namin. Ang susunod na linya ay karaniwang tumitingin sa unang parameter ng input na ibinigay ng gumagamit at pinaghambing ito sa salitang "masalita". Kung ang parameter ng input at ang salitang "masalita" ay tumutugma sa mga linya sa pagitan ng pagkatapos at fi ay tumakbo.

Ang script sa itaas ay maliwanag na may depekto. Ano ang mangyayari kung hindi ka nagbibigay ng parameter ng input sa lahat? Ang sagot ay nakakakuha ka ng isang error kasama ang mga linya ng hindi inaasahang operator.

Ang iba pang mga pangunahing depekto ay na kung hindi mo ibigay ang salitang "masalita" pagkatapos ay walang mangyayari sa lahat. Sa isip kung hindi mo ibigay ang salitang masalita ang script ay magbabalik ng isang listahan ng mga pamagat.

Gamitin muli ang nano upang i-edit ang rssget.sh file at baguhin ang code bilang mga sumusunod:

#! / bin / bash

kung [$ 1 = "masalita"]
pagkatapos
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

I-save ang file at patakbuhin ito sa pamamagitan ng pag-type ng sumusunod:

sh rssget.sh verbose

Lilitaw ang isang listahan ng mga pamagat, mga paglalarawan at mga link. Ngayon patakbuhin itong muli tulad ng sumusunod:

sh rssget.sh mga pamagat

Ang oras na ito ay isang listahan lamang ng mga pamagat.

Ang sobrang bahagi ng script ay nasa linya 4 at nagpapakilala sa iba pang pahayag. Karaniwang sinasabi ng script na ngayon kung ang unang parameter ay ang salitang "masalita" na makuha ang paglalarawan, mga link at mga pamagat para sa RSS feed ngunit kung ang unang parameter ay anumang bagay lamang makakuha ng isang listahan ng mga pamagat.

Ang script ay pinabuting bahagyang ngunit pa rin flawed. Kung hindi mo ipasok ang isang parameter magkakaroon ka pa ng error. Kahit na nagbibigay ka ng isang parameter, sa pamamagitan lamang ng pagsasabi na hindi mo gusto ang verbose ay hindi nangangahulugan na gusto mo ng mga pamagat lamang. Maaaring na-spell ka na lang ang mali sa kasamang halimbawa o maaaring na-type mo ang mga kalapati na walang kabuluhan.

Bago namin subukan at i-clear ang mga isyung ito nais kong ipakita sa iyo ang isa pang command na napupunta sa KUNG pahayag.

I-edit ang iyong rssget.sh script upang tumingin tulad ng sumusunod:

#! / bin / bash

kung [$ 1 = "lahat"]
pagkatapos
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "paglalarawan"]
pagkatapos
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Nagpasya ako upang mapupuksa ang salitang pandiwa at pinalitan ito ng lahat. Hindi iyon ang mahalagang bahagi. Ang script sa itaas introduces elif na kung saan ay isang maikling paraan ng sinasabi ELSE KUNG.

Ngayon ang script ay gumagana tulad ng sumusunod. Kung nagpapatakbo ka ng sh rssget.sh lahat makakakuha ka ng mga paglalarawan, mga link at mga pamagat. Kung sa halip ay pinapatakbo mo lamang ang paglalarawan ng sh rssget.sh makakakuha ka lamang ng mga pamagat at mga paglalarawan. Kung magbibigay ka ng anumang iba pang salita makakakuha ka ng isang listahan ng mga pamagat.

Ipinakikilala nito ang isang paraan ng mabilis na paglapit sa isang listahan ng mga kondisyong pahayag. Ang isang alternatibong paraan ng paggawa ng ELIF ay ang paggamit ng kung ano ang kilala bilang nested KUNG pahayag.

Ang sumusunod ay isang halimbawa na nagpapakita kung paano gumagana ang nested KUNG pahayag:

#! / bin / bash

kung [$ 2 = "aboutdotcom"]
pagkatapos
kung [$ 1 = "lahat"]
pagkatapos
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "paglalarawan"]
pagkatapos
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
iba pa
kung [$ 1 = "lahat"]
pagkatapos
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "paglalarawan"]
pagkatapos
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Huwag mag-i-type ang lahat ng iyon kung gusto mo o kopyahin at i-paste ito sa iyong rssget.sh file.

Ang script sa itaas ay nagpapakilala ng isang 2nd parameter na nagpapahintulot sa iyo na pumili ng alinman sa "about.com" o "lxer.com" ng RSS feed.

Upang patakbuhin ito i-type mo ang sumusunod:

sh rssget.sh lahat tungkol sadotcom

o

sh rssget.sh lahat lxer

Maaari mong siyempre palitan ang lahat ng may mga paglalarawan o pamagat upang magbigay lamang ng mga paglalarawan o mga pamagat lamang.

Karaniwang sinasabi ng code sa itaas kung ang pangalawang parameter ay tungkol sa aboutdotcom pagkatapos ay tumingin sa pangalawang kung pahayag na kung saan ay ang parehong isa mula sa nakaraang script ibang kung ang pangalawang parameter ay lxer pagkatapos ay tumingin sa loob kung pahayag muli upang magpasiya kung upang ipakita ang mga pamagat, paglalarawan o lahat.

Ang script na iyon ay ibinigay nang husto bilang isang halimbawa ng isang nakasulat na pahayag at may maraming mga bagay na mali sa script na iyon ay kukuha ng isa pang artikulo na ipaliwanag ang lahat ng ito. Ang pangunahing isyu ay hindi ito maaaring i-scalable.

Isipin na gusto mong magdagdag ng isa pang RSS feed tulad ng Araw-araw na Linux User o Linux Ngayon? Ang script ay magiging napakalaking at kung nagpasya kang gusto mo ang panloob na pahayag ng KANIYANG upang palitan ay kailangan mong baguhin ito sa maraming lugar.

Habang mayroong isang oras at lugar para sa isang nested KUNG dapat sila ay ginagamit ng paisa-isa. Karaniwan ang isang paraan upang refactor ang iyong code upang hindi mo kailangan ang nested KUNG sa lahat. Pupunta ako sa paksang ito sa isang artikulo sa hinaharap.

Tingnan natin ngayon ang pag-aayos ng isyu ng mga taong nagpapasok ng mga parameter ng duff. Halimbawa sa script sa itaas kung ang user ay pumasok sa isang bagay maliban sa "aboutdotcom" bilang 2nd parameter at pagkatapos ay isang listahan ng mga artikulo ay lilitaw mula sa RSS feed mula sa LXER kahit na kung ang user ay pumasok sa lxer o hindi.

Bilang karagdagan kung ang user ay hindi ipasok ang "lahat" o "paglalarawan" bilang ang 1st parameter pagkatapos ang default ay isang listahan ng mga pamagat na maaaring o hindi kung ano ang nilalayon ng user.

Tingnan ang sumusunod na script (o kopyahin at i-paste ito sa iyong rssget.sh file.

#! / bin / bash

kung ang [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
pagkatapos
kung ang [$ 1 = "lahat"] || [$ 1 = "paglalarawan"] || [$ 1 = "pamagat"]
pagkatapos
kung [$ 2 = "aboutdotcom"]
pagkatapos

kung [$ 1 = "lahat"]
pagkatapos
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "paglalarawan"]
pagkatapos
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
iba pa
kung [$ 1 = "lahat"]
pagkatapos
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "paglalarawan"]
pagkatapos
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Ang unang bagay na dapat tandaan ay ang script ay nakakakuha ngayon medyo malaki at maaari mong mabilis na makita kung paano sa labas ng kontrol nested KUNG mga pahayag ay maaaring maging.

Ang bit na mahalaga sa script na ito ay ang KUNG pahayag || pahayag THEN seksyon sa linya 2 at linya 4.

Ang || ay kumakatawan sa OR. Kaya ang linya kung [$ 2 = "aboutdotcom"] || Sinusuri ng [$ 2 = "lxer"] kung ang pantay na parameter ay katumbas ng "aboutdotcom" o "lxer". Kung hindi pagkatapos ay kumpleto ang pahayag ng KUNG dahil walang ibang pahayag para sa panlabas na pinaka- KUNG.

Katulad din sa linya 4 ang linya kung [$ 1 = "lahat"] || [$ 1 = "paglalarawan"] || Sinusuri ng [$ 1 = "pamagat"] kung ang parameter na 1st ay katumbas ng alinman sa "lahat" o "paglalarawan" o "pamagat".

Ngayon kung ang gumagamit ay nagpapatakbo ng sh rssget.sh patatas na keso wala ay ibalik kung saan bago sila nakatanggap ng isang listahan ng mga pamagat mula sa LXER.

Ang kabaligtaran ng || ay &&. Ang && operator ay kumakatawan sa AT.

Pupunta ako upang gawing mas kapareha ang isang script tulad ng isang bangungot ngunit ginagawa nito ang lahat ng mahahalagang pagsusuri upang matiyak na ang gumagamit ay nagbigay ng 2 parameter.

#! / bin / bash

kung [$ # -eq 2]
pagkatapos

kung ang [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
pagkatapos
kung ang [$ 1 = "lahat"] || [$ 1 = "paglalarawan"] || [$ 1 = "pamagat"]
pagkatapos
kung [$ 2 = "aboutdotcom"]
pagkatapos

kung [$ 1 = "lahat"]
pagkatapos
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "paglalarawan"]
pagkatapos
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
iba pa
kung [$ 1 = "lahat"]
pagkatapos
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "paglalarawan"]
pagkatapos
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
iba pa
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Ang tanging bit na dagdag sa script na iyon ay isa pang panlabas na KUNG pahayag tulad ng sumusunod: kung [$ # -eq 2] . Kung nabasa mo ang artikulo tungkol sa mga parameter ng pag-input malalaman mo na ang $ # ay nagbabalik ng isang bilang ng bilang ng mga parameter ng input. Ang -eq ay kumakatawan sa katumbas. Sinusuri ng KUNG pahayag na ang gumagamit ay nagpasok ng 2 parameter at kung hindi nila ito lumabas lamang nang walang ginagawa. (Hindi partikular na magiliw).

Alam ko na ang tutorial na ito ay nakakakuha ng masyadong malaki. Wala pang masasaklaw sa linggong ito ngunit gusto kong makatulong na maglinis ng script bago kami makatapos.

Ang isang huling utos na kailangan mong malaman tungkol sa mga kondisyong pahayag ay ang pahayag ng KASO.

#! / bin / bash


kung [$ # -eq 2]
pagkatapos
kaso $ 2 sa
aboutdotcom)
kaso $ 1 sa
lahat)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
paglalarawan)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
pamagat)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
kaso $ 1 sa
lahat)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
paglalarawan)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
pamagat)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Ang pahayag ng kaso ay isang mas mahusay na paraan ng pagsusulat KUNG KUNG PAANO KUNG KUNG PAANO KUNG.

Halimbawa ng lohika na ito

KUNG prutas = saging
Pagkatapos nito
Iba pa kung bunga = mga dalandan
Pagkatapos nito
Iba pa kung bunga = ubas
Pagkatapos nito
TAPUSIN KUNG

maaaring isulat muli bilang:

prutas kaso sa
saging)
gawin ito
;;
mga dalandan)
gawin ito
;;
ubas)
gawin ito
;;
esac

Talaga ang unang item pagkatapos ng kaso ay ang bagay na iyong ihahambing (ie prutas). Pagkatapos ang bawat item bago ang mga braket ay ang bagay na iyong hinahambing laban at kung tumutugma ito sa mga linya na sinusundan ;; ay tumakbo. Ang isang pahayag ng kaso ay tinapos na may reverse esac (na kung saan ang kaso ay paurong).

Sa rssget.sh script ang pahayag ng kaso ay nagtanggal ng ilan sa mga kakila-kilabot nesting bagaman hindi talagang pagpapabuti ng sapat na ito.

Upang mapabuti ang script kailangan kong ipakilala sa mga variable.

Tingnan ang sumusunod na code:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
display = ""
url = ""

kung [$ # -lt 2] || [$ # -gt 2]
pagkatapos
echo "paggamit: rssget.sh [all | description | title] [aboutdotcom | lxer]";
lumabas;
fi

kaso $ 1 sa
lahat)
display = "- d -l -u"
;;
paglalarawan)
display = "- d -u"
;;
pamagat)
display = "- u"
;;
esac

kaso $ 2 sa
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

Ang isang variable ay tinukoy sa pamamagitan ng pagbibigay ito ng isang pangalan at pagkatapos ay pagtatalaga ng isang halaga dito. Sa halimbawa sa itaas ang mga sumusunod ay mga takdang-aralin na variable:

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
display = ""
url = ""

Ang script ay agad na mas madaling pamahalaan sa pamamagitan ng paggamit ng mga variable. Halimbawa, ang bawat parameter ay hawak nang magkahiwalay at sa gayon walang mga nested KUNG pahayag.

Ang variable ng display ay itatakda na ngayon depende sa kung pinili mo ang lahat, paglalarawan o pamagat at ang variable ng url ay nakatakda sa halaga ng tungkol sa variable ng aboutdotcom o ang halaga ng variable ng lxer depende kung pinili mo ang aboutdotcom o lxer.

Ang command na rsstail ngayon ay dapat na gamitin lamang ang halaga ng display at url upang tumakbo nang wasto.

Habang ang mga variable ay itinakda lamang sa pamamagitan ng pagbibigay sa kanila ng isang pangalan, upang aktwal na gamitin ang mga ito kailangan mong ilagay ang isang $ sign sa harap ng mga ito. Sa ibang mga salita variable = halaga ay nagtatakda ng variable sa isang halaga samantalang ang variable ng $ ay nagbibigay sa akin ng mga nilalaman ng variable.

Ang sumusunod ay ang huling script para sa tutorial na ito.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
paggamit = "paggamit: rssget.sh [all | description | title] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
display = ""
url = ""

kung [$ # -lt 2] || [$ # -gt 2]
pagkatapos
echo $ paggamit;
lumabas;
fi

kaso $ 1 sa
lahat)
display = "- d -l -u"
;;
paglalarawan)
display = "- d -u"
;;
pamagat)
display = "- u"
;;
*)
echo $ paggamit;
lumabas;
;;
esac

kaso $ 2 sa
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ paggamit;
lumabas;
esac

rsstail $ display $ url;

Ang script sa itaas ay nagpapakilala ng higit pang mga RSS feed at mayroong variable ng paggamit na nagsasabi sa user kung paano gamitin ang script kung sila ay hindi nagpasok ng 2 variable o nagpasok sila ng hindi tamang mga pagpipilian para sa mga variable.

Buod

Ito ay isang mahabang tula na artikulo at maaaring masyadong nawala sa lalong madaling panahon. Sa susunod na gabay ipapakita ko sa iyo ang lahat ng mga opsyon sa paghahambing para sa KUNG pahayag at mayroon pa rin higit pa upang makipag-usap tungkol sa mga variable.

Mayroon ding higit pa na maaaring gawin upang mapabuti ang script sa itaas at ito ay sakop sa mga gabay sa hinaharap habang tinutuklas namin ang mga loop, grep at regular na expression.

Tingnan ang Paano (Mag-scroll down nakaraang mga kategorya upang makita ang isang listahan ng mga artikulo) na seksyon ng l inux.about.com upang maghanap ng mas kapaki-pakinabang na mga gabay mula sa dual booting Windows at Ubuntu upang mag- set up ng isang virtual machine gamit ang GNOME na mga kahon .