Mga magsisimula Giya sa BASH - Kondisyon Ug Mga Variable

Pasiuna

Welcome sa ikatulo nga bahin sa "Beginners Guide To BASH". Kung nahikalimtan mo ang miaging duha ka mga artikulo nan tingali gusto nimong mahibal-an kung unsa ang naghimo niini nga giya nga lahi sa ubang mga BASH scripting guides.

Kini nga giya gisulat sa usa ka kompleto nga bag-o ngadto sa BASH ug busa ingon sa usa ka magbabasa nga imong natun-an samtang ako nagkat-on. Samtang ako usa ka bag-o sa BASH nga ako naggikan sa usa ka software development background bisan kadaghanan sa mga butang nga akong gisulat mao ang alang sa Windows plataporma.

Makita nimo ang unang duha ka giya pinaagi sa pagbisita:

Kung bag-o ka sa BASH scripting, akong girekomendar ang pagbasa sa unang duha ka giya sa wala pa ipadayon kini.

Niini nga giya akong ipadayag kung unsaon paggamit ang conditional nga mga pahayag aron sulayan ang input sa user ug kontrolon kung giunsa ang usa ka gimbuhaton sa script.

Pag-instalar og rsstail

Aron masunod kini nga giya kinahanglan nimo i-install ang command line application nga gitawag og rsstail nga gigamit sa pagbasa sa mga RSS feed .

Kon ikaw naggamit sa usa ka Debian / Ubuntu / Mint nga gibase nga distribute type ang mosunod:

sudo apt-get install rsstail

Alang sa Fedora / CentOS etc i-type ang mosunod:

pag-instalar sa rsstail

Alang sa openSUSE i- type ang mosunod:

zypper instalar nga rsstail

Ang pahayag

Ablihi ang terminal ug paghimo og file nga gitawag rssget.sh pinaagi sa pag-type sa mosunod:

sudo nano rssget.sh

Sulod sa editor sa nano mosulod ang mosunod nga teksto:

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

Luwasa ang file pinaagi sa pagputol sa CTRL ug O ug dayon exit pinaagi sa pagputol sa CTRL ug X.

Pagdalagan ang script pinaagi sa pagsulat sa mosunod:

sh rssget.sh

Ang script mobalik sa listahan sa mga titulo gikan sa linux.about.com RSS feed.

Dili kini sobra ka mapuslanon nga script tungod kay gikuha lamang niini ang mga titulo gikan sa usa ka RSS feed apan kini nagaluwas nga kinahanglan mahinumduman ang dalan sa Linux.about.com RSS feed.

Ablihi ang script sa rssget.sh sa nano pag-usab ug usba ang file aron makita ang mosunod:

#! / bin / bash

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

Pagdalag balik sa script pinaagi sa pag-type sa mosunod:

sh rssget.sh verbose

Niining higayona ang RSS feed nagbalik sa titulo, link ug paghulagway.

Susihon nato ang script sa usa ka tipik nga detalye:

Ang #! / Bin / bash makita sa matag script nga atong gisulat. Ang sunod nga linya nag-unang pagtan-aw sa unang sulud sa input nga gihatag sa gumagamit ug nagtandi niini sa pulong nga "verbose". Kung ang input parameter ug ang pulong nga "verbose" mao ang mga linya tali sa dayon ug fi .

Ang script sa ibabaw klaro nga sayup. Unsa man ang mahitabo kung dili ka maghatag og parameter nga input? Ang tubag mao nga ikaw adunay usa ka sayop sa mga linya sa wala damha nga operator.

Ang uban pang dagko nga sayup mao nga kung dili ka mohatag sa pulong nga "verbose" wala'y bisan unsa nga mahitabo. Sa tinuud kon wala ka naghatag sa pulong nga verbose ang script mobalik sa listahan sa mga titulo.

Paggamit sa nano pag-usab aron ma-edit ang file nga rssget.sh ug usbon ang code ingon sa mosunod:

#! / bin / bash

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

Luwasa ang file ug ipadagan kini pinaagi sa pag-type sa mosunod:

sh rssget.sh verbose

Ang usa ka lista sa mga titulo, paghubit ug mga sumpay makita. Karon pagdagan kini pag-usab ingon sa mosunod:

sh rssget.sh nga mga titulo

Niining higayona usa lamang ka lista sa mga titulo ang makita.

Ang sobra nga bahin sa script anaa sa linya 4 ug nagpaila sa laing pahayag. Sa kasagaran ang script karon nag-ingon kung ang unang parameter mao ang pulong nga "verbose" makuha ang paghulagway, mga link ug mga titulo alang sa RSS feed apan kung ang una nga parameter mao ang bisan unsang butang makadawat lamang og listahan sa mga titulo.

Ang script mas milig-on apan sayup gihapon. Kung mapakyas ka sa pagsulod sa usa ka parameter ikaw makahimo gihapon og kasaypanan. Bisan kung naghatag ka og usa ka parameter, sa pag-ingon nga dili nimo gusto ang verbose wala'y buot ipasabut nga gusto nimo ang mga titulo lamang. Mahimo nga imong gipa-spelling ang sayop nga sayop nga pananglitan o tingali ikaw adunay gi-type nga mga pigeons nga walay kahulogan.

Sa dili pa nato sulayan ug tin-aw ang mga isyu nga gusto nakong ipakita kanimo ang usa pa ka sugo nga ipaagi sa IF nga pahayag.

Usba ang imong rssget.sh script aron tan-awon ang mosunod:

#! / bin / bash

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

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

Nakahukom ko nga isalikway ang pulong nga verbose ug gipulihan kini sa tanan. Dili kana ang importante nga bahin. Ang script sa ibabaw nagpaila sa elif nga usa ka mubo nga paagi sa pagsulti ELSE IF.

Karon ang script nagtrabaho ingon sa mosunod. Kung ikaw modalag sh rssget.sh tanan unya ikaw makakuha og mga paghubit, mga link ug mga titulo. Kung sa baylo ikaw lang modagan sa sh rssget.sh nga paghulagway nga ikaw makakuha lamang og mga titulo ug mga paghubit. Kung maghatag ka ug bisan unsa nga pulong ikaw makakuha og lista sa mga titulo.

Kini nagpaila sa usa ka paagi sa pagdali sa usa ka listahan sa mga kondisyon nga mga pamahayag. Ang laing paagi sa paghimo sa ELIF mao ang paggamit sa nailhan nga nested kung adunay mga pahayag.

Ang mosunod usa ka pananglitan nga nagpakita kung giunsa nga nested ang mga pamahayag:

#! / bin / bash

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

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

Ayaw pagbutang sa tanan nga anaa sa kung gusto nimo o kopyahon ug i-paste kini sa imong rssget.sh file.

Ang labaw sa script nagpaila sa usa ka ika-2 nga lagda nga nagtugot kanimo sa pagpili sa "about.com" o "lxer.com" usa ka RSS feed.

Aron makadagan kini imong i-type ang mosunod:

sh rssget.sh tanan aboutdotcom

o

sh rssget.sh tanan lxer

Siyempre mahimo nimong mapulihan ang tanan uban sa paghubit o mga titulo aron paghatag og mga paghubit o mga titulo.

Sa sukaranan ang code sa ibabaw nagsulti kung ang ikaduha nga parameter mao ang aboutdotcom unya tan-awon ang ikaduha kung ang pamahayag nga mao ang sama nga gikan sa naunang script laing kung ang ikaduha nga parameter mao ang lxer unya tan-aw sa sulod kon pamahayag pag-usab aron sa paghukom kon magpakita ba ang mga titulo, mga hulagway o tanan.

Kana nga script gihatag lamang ingon nga usa ka panig-ingnan sa usa ka nested nga pamahayag ug adunay daghan kaayong mga butang nga sayup sa script nga kini magkuha og laing artikulo aron ipatin-aw kining tanan. Ang nag-unang isyu mao nga dili kini mausab.

Hunahunaa nga gusto nimong idugang ang laing RSS feed sama sa Everyday Linux User o Linux Today? Ang script mahimong dako ug kon ikaw nakahukom nga gusto nimo ang kinasuloran nga pahayag sa pagbag-o ikaw kinahanglan nga mag-usab niini sa daghang mga dapit.

Samtang adunay usa ka panahon ug dapit alang sa usa ka nested kung gikinahanglan nga gamiton kini nga gamay. Sa kasagaran adunay usa ka paagi sa pagbalibad sa imong code aron dili nimo gikinahanglan ang nested kung KANIYA. Moadto ako niini nga hilisgutan sa umaabot nga artikulo.

Tan-awon nato karon ang pag-ayo sa isyu sa mga tawo nga nagsulod sa duff parameter. Pananglitan sa script sa ibabaw kon ang user mosulod sa usa ka butang gawas sa "aboutdotcom" ingon nga ang 2nd parameter unya ang usa ka lista sa mga artikulo makita gikan sa RSS feed gikan sa LXER bisan kung ang user mosulod sa lxer o dili.

Dugang pa kon ang user dili magsulod sa "tanan" o "paghulagway" ingon nga ang 1st nga parameter dayon ang default mao ang usa ka lista sa mga titulo nga mahimo o dili ang gipangita sa user.

Tan-awa ang mosunod nga script (o kopyaha ug i-paste kini sa imong rssget.sh file.

#! / bin / bash

kung [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
unya
kung [$ 1 = "tanan"] || [$ 1 = "paghulagway"] || [$ 1 = "titulo"]
unya
kung [$ 2 = "aboutdotcom"]
unya

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

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

Ang una nga butang nga timan-an mao nga ang script karon nagkaanam og dako ug mahimo nimo dayon makita kon unsaon sa pagkontrol sa nested kung ang mga pamahayag mahimong mahimo.

Ang gamay nga importante sa niini nga script mao ang IF nga pahayag || pahayag NIINI nga seksyon sa linya 2 ug linya 4.

Ang || nagbarug alang sa OR. Busa ang linya kung [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] nagsusi kung ang 2nd nga parametro katumbas sa "aboutdotcom" o "lxer". Kung dili kini mao ang kompleto nga pamahayag tungod kay walay lain nga pahayag alang sa panggawas nga labing KAN.

Susama sa linya 4 ang linya kon [$ 1 = "tanan"] || [$ 1 = "paghulagway"] || [$ 1 = "titulo"] nagsusi kung ang 1st nga parametro parehas sa "all" o "description" o "title".

Karon kung ang user midagan sh rssget.sh patatas nga keso walay gibalik nga samtang sa wala pa sila makadawat og listahan sa mga titulo gikan sa LXER.

Ang kaatbang sa || mao ang &&. Ang && operator nagpasabut sa AND.

Akong himoon ang script nga mas matan-aw sama sa usa ka nightmare apan kini naghimo sa tanan nga importante nga pagsusi aron sa pagsiguro nga ang user naghatag sa 2 nga mga lagda.

#! / bin / bash

kon [$ #-2]
unya

kung [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
unya
kung [$ 1 = "tanan"] || [$ 1 = "paghulagway"] || [$ 1 = "titulo"]
unya
kung [$ 2 = "aboutdotcom"]
unya

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

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

Ang bugtong nga ekstra sa sinulat mao ang laing pangutana sa gawas gawas kung: [$ # -eq 2] . Kon imong basahon ang artikulo bahin sa mga sulud sa input ikaw mahibalo nga ang $ # magbalik sa usa ka ihap sa gidaghanon sa mga pag-input nga mga parameter. Ang -eq mao ang managsama. Kung ang IF nga pamahayag nagsusi nga ang user misulod sa 2 nga mga lagda ug kung dili nila kini mogawas nga wala'y mahimo. (Dili kaayo mahigalaon).

Nahibal-an ko nga kini nga panudlo nagkadako. Dili na daghan ang pagtabon niini nga semana apan gusto kong motabang sa paghapsay sa script sa dili pa kami mahuman.

Ang usa ka katapusang sugo nga kinahanglan nimong mahibal-an mahitungod sa conditional statements mao ang pahayag sa CASE.

#! / bin / bash


kon [$ #-2]
unya
kaso $ 2 sa
aboutdotcom)
kaso $ 1 sa
tanan)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
paghulagway)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
titulo)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
kaso $ 1 sa
tanan)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
paghulagway)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
titulo)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Ang pahayag sa kaso usa ka mas maayo nga paagi sa pagsulat KON DILI MAHIBALO KUNG NAA KANI.

Pananglitan kini nga pangatarungan

KON bunga = saging
NIINING kini
ELSE KON FRF = mga oranges
NIINING kini
BISYO nga bunga = mga ubas
NIINING kini
Tapuson ko

mahimong isulat pag-usab sama sa:

kaso sa prutas
saging)
buhata ni
;;
Oranges)
buhata ni
;;
ubas)
buhata ni
;;
esac

Ang una nga butang human sa kaso mao ang butang nga imong itandi (ie bunga). Unya ang matag aytem sa atubangan sa mga braket mao ang butang nga imong gitandi sa batok ug kung kini ang giparis sa mga linya nga nag-una; pagdagan. Ang usa ka pahayag sa kaso natapos uban sa reverse esac (nga mao ang paatras nga kaso).

Sa script nga rssget.sh ang pahayag sa kaso nagwagtang sa pipila ka makalilisang nga pagsabwag bisan wala'y igo nga pagpalambo niini.

Aron sa pagpalambo gayud sa script kinahanglan ko ipaila kanimo ngadto sa mga variable.

Tan-awa ang mosunod nga lagda:

#! / bin / bash

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

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

kaso $ 1 sa
tanan)
ipakita = "- d -l -u"
;;
paghulagway)
ipakita = "- d -u"
;;
titulo)
ipakita = "- u"
;;
esac

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

Ang usa ka baryohanon gihubit pinaagi sa paghatag niini og ngalan ug dayon paghatag og bili niini. Sa pananglitan sa ibabaw ang mosunod mao ang mga assignment sa matag usa:

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

Ang script dali nga madumala pinaagi sa paggamit sa mga variable. Pananglitan nga ang matag usa ka parametro gidumala nga gilain ug busa wala'y nested kung adunay mga pahayag.

Ang display nga kapilian gipahimutang na karon depende kung imong gipili ang tanan, deskripsyon o titulo ug ang variable sa url gitakda ngadto sa bili sa aboutdotcom variable o ang bili sa lxer variable depende kung gipili nimo aboutdotcom o lxer.

Ang sugo sa rsstail karon kinahanglan nga gamiton ang bili sa display ug url aron makalihok sa husto.

Samtang ang mga kabag-ohan napahimutang lamang pinaagi sa paghatag kanila og usa ka ngalan, sa aktuwal magamit kini nga imong gibutang ang usa ka $ nga ilhanan sa atubangan nila. Sa lain nga mga pulong nga variable = value set nga variable ngadto sa usa ka bili samtang ang variable sa $ nagpasabot sa paghatag kanako sa sulod sa variable.

Ang mosunod mao ang katapusan nga script alang niini nga panudlo.

#! / bin / bash

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

kung [$ # -lt 2] || [$ # -gt 2]
unya
echo $ paggamit;
paggawas;
fi

kaso $ 1 sa
tanan)
ipakita = "- d -l -u"
;;
paghulagway)
ipakita = "- d -u"
;;
titulo)
ipakita = "- u"
;;
*
echo $ paggamit;
paggawas;
;;
esac

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

rsstail $ display $ url;

Ang labaw sa script nagpaila sa dugang nga mga RSS feed ug adunay usa ka variable sa paggamit nga nagsulti sa user kon unsaon paggamit ang script kung sila dili makasulod sa 2 mga variable o sila mosulod sa sayop nga mga kapilian alang sa mga variable.

Sumaryo

Kini usa ka epiko nga artikulo ug lagmit nga dili na kaayo madugay. Sa sunod nga giya ipakita ko kanimo ang tanan nga mga kapilian sa pagtandi alang sa mga pamahayag ug adunay daghan pa nga maghisgot kabahin sa mga baryable.

Adunay dugang pa nga mahimo aron mapalambo ang script sa ibabaw ug kini gitabonan sa umaabot nga mga giya samtang kita mag-usisa sa mga galong, grep ug regular nga mga pulong.

Tan-awa ang How To (Mag-scroll sa milabay nga mga kategoriya aron makita ang usa ka listahan sa mga artikulo) nga seksyon sa l inux.about.com aron sa pagpangita sa mas mapuslanong giya gikan sa dual booting Windows ug Ubuntu sa pag-set up sa usa ka virtual machine gamit ang GNOME nga mga kahon .