Tùs Luchd-tòiseachaidh gu BASH - Cumhachan is Ath-bheothachadh

Ro-ràdh

Fàilte don treas pàirt de "Tùs Luchd-tòiseachaidh gu BASH". Ma chaill thu an dà artaigil roimhe, is dòcha gum bi thu airson faighinn a-mach dè a tha a 'dèanamh an iùl seo eadar-dhealaichte ri treòrachadh sgriobtaichean BASH eile.

Tha an stiùireadh seo air a sgrìobhadh le neach-ionnsachaidh iomlan gu BASH agus mar leughadair a tha thu ag ionnsachadh fhad 'sa tha mi ag ionnsachadh. Ged a tha mi nam nuadh-eòlas gu BASH tha mi a 'tighinn bho leasachadh bathar-bog ged a tha a' mhòr-chuid de na rudan a sgrìobh mi air a bhith aig àrd-ùrlar Windows.

Chì thu a 'chiad dà threòrachadh le bhith a' tadhal air:

Ma tha thu ùr gu sgriobtadh BASH tha mi a 'moladh a bhith a' leughadh a 'chiad dà stiùireadh mus lean thu ris an fhear seo.

Anns an iùl seo bidh mi a 'sealltainn mar a chleachdas tu aithrisean co-chòrdail gus a bhith a' feuchainn a-steach luchd-cleachdaidh agus gus smachd a chumail air mar a tha sgriobt ag obair

Stàlaich rsstail

Gus an leanabh seo a leantainn, feumaidh tu iarrtas loidhne òrdain a stàladh ris an canar rsstail a tha air a chleachdadh gus feeds RSS a leughadh.

Ma tha thu a 'cleachdadh seòrsa sgaoileadh debian stèidhichte air Debian / Ubuntu / Mint na leanas:

sudo apt-faigh stàladh rsstail

Airson Fedora / CentOS etc tha na leanas a 'toirt a-steach:

cuir stad air rsstail

Airson seòrsa openSUSE na leanas:

zypper a stàladh rsstail

An aithris IF

Fosgail suas ceann-uidhe agus cruthaich faidhle ris an canar rssget.sh le bhith a 'sgrìobhadh na leanas:

sudo nano rssget.sh

Taobh a-staigh an deasaiche nano, cuir a-steach an teacsa a leanas:

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

Sàbhail am faidhle le bhith a 'putadh CTRL agus O agus an uairsin falbh le bhith a' putadh CTRL agus X.

Rach an sgriobt le bhith a 'sgrìobhadh na leanas:

sh rssget.sh

Tillidh an sgriobt liosta thiotalan bho RSS feed linux.about.com.

Chan e sgriobt thar cus feum a th 'ann oir tha e dìreach a' toirt air ais na tiotalan bho aon bhiadh RSS ach tha e a 'dèanamh cinnteach gun cuimhnich e an t-slighe gu RSS feed Linux.about.com.

Fosgail an sgriobt rssget.sh ann an nano a-rithist agus cruthaich am faidhle mar a leanas:

#! / bin / bash

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

Rach an sgriobt a-rithist le bhith a 'sgrìobhadh na leanas:

sh rssget.sh verbose

An turas seo thig am feed RSS air ais leis an tiotal, an ceangal agus an tuairisgeul.

Leigamaid mion-sgrùdadh air an sgriobt:

Nochdaidh an #! / Bin / bash anns gach sgriobt a tha sinn a 'sgrìobhadh. Tha an ath loidhne gu h-àbhaisteach a 'coimhead air a' chiad pharaimear ionraidh a tha an neach-cleachdaidh a 'toirt seachad agus ga choimeas ris an fhacal "verbose". Ma tha am paramadair inntrigidh agus am facal "verbose" a 'maidseadh nan loidhnichean eadar sin agus fi a ' ruith.

Tha an sgriobt gu h-àrd follaiseach. Dè a thachras mura h-eil thu a 'toirt paramadair ionraidh idir? Is e am freagairt a gheibh thu mearachd a rèir sreathan gnìomhaiche ris nach robh dùil.

Is e am prìomh fhacal eile, mura toir thu seachad am facal "verbose", chan eil dad a 'tachairt idir. Gu h-iongantach mura h-eil thu a 'toirt seachad am facal, bidh an sgriobt a' tilleadh liosta thiotalan.

Cleachd nano a-rithist gus am faidhle rssget.sh a dheasachadh agus an còd atharrachadh mar a leanas:

#! / bin / bash

ma tha [$ 1 = "verbose"]
an uairsin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
eile
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Sàbhail am faidhle agus ruith e le bhith a 'sgrìobhadh na leanas:

sh rssget.sh verbose

Bidh liosta de thiotalan, tuairisgeulan agus ceanglaichean a 'nochdadh. A-nis ruith e a-rithist mar a leanas:

sh rssget.sh tiotalan

An turas seo cha nochd liosta de na tiotalan.

Tha an earrann a bharrachd den sgriobt air loidhne 4 agus a 'toirt a-steach an aithris eile . Gu h-àbhaisteach, tha an sgriobt a-nis ag ràdh ma tha a 'chiad pharamadair an fhacal "verbose" a' faighinn an tuairisgeul, na ceanglaichean agus na tiotalan airson an RSS feed ach ma tha a 'chiad pharameter aon rud eile dìreach faigh liosta de na tiotalan.

Tha an sgriobt air a dhol air adhart beagan ach tha e fhathast mì-thoilichte. Mura fàg thu paramadair, gheibh thu mearachd fhathast. Eadhon ged a bheir thu paramadair, dìreach le bhith ag ràdh nach eil thu ag iarraidh chan eil verbose a 'ciallachadh gu bheil thu ag iarraidh tiotalan a-mhàin. Is dòcha gu bheil thu dìreach air litreachadh ceàrr mar eisimpleir, no 's dòcha gu bheil colomain air a chlò-bhualadh nach eil gu bràth.

Mus feuchaidh sinn ri na cùisean sin fhuasgladh, tha mi airson gun toir thu aon òrdugh dhut a tha a 'dol leis an aithris IF.

Deasaich do sgriobt rssget.sh airson coimhead mar a leanas:

#! / bin / bash

ma tha [$ 1 = "uile"]
an uairsin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
an uairsin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Cho-dhùin mi cuidhteas am facal verbose agus chuir e a h-uile càil an àite e. Chan e sin am pàirt chudromach. Tha an sgriopt gu h-àrd a 'toirt a-steach elif a tha na dhòigh ghoirid de bhith ag ràdh ELSE IF.

A-nis, tha an sgriobt ag obair mar a leanas. Ma shiubas tu rssget.sh uile gheibh thu tuairisgeul, ceanglaichean agus tiotalan. Ma tha thu an-dràsta tha thu dìreach a 'ruith tuairisgeul sh rssget.sh gheibh thu tiotalan agus tuairisgeul. Ma bheir thu seachad facal sam bith eile gheibh thu liosta de thiotalan.

Tha seo a 'toirt a-steach dòigh air a bhith a' tighinn suas le liosta de aithrisean co-cheangailte. Is e dòigh eile de ELIF a bhith a 'cleachdadh na tha aithnichte mar aithrisean IF neadachaidh.

Tha na leanas mar eisimpleir a 'sealltainn mar a tha aithrisean IF neadach ag obair:

#! / bin / bash

ma tha [$ 2 = "timcheall air"]
an uairsin
ma tha [$ 1 = "uile"]
an uairsin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
an uairsin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

eile
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
eile
ma tha [$ 1 = "uile"]
an uairsin
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
an uairsin
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
eile
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Thoir fa-near a bhith a 'sgrìobhadh a h-uile càil a tha ann ma tha thu ag iarraidh no a chopaigeadh agus a ghluasad a-steach don fhaidhle rssget.sh agad.

Tha an sgriobt gu h-àrd a 'toirt a-steach 2 parameter a leigeas leat taghadh "about.com" no "lxer.com" mar bhiadh RSS.

Gus ruith e, cuiridh tu na leanas a-steach:

sh rssget.sh air fad mu dheidhinn

no

sh rssget.sh a h-uile lxer

Faodaidh tu a bhith an àite gach nì le tuairisgeulan no tiotalan gus dìreach tuairisgeulan a thoirt seachad no dìreach tiotalan.

Gu h-àbhaisteach, tha an còd gu h-àrd ag ràdh ma tha an dàrna paramadair mu thimcheall air an uairsin, an uairsin coimhead air an dàrna fear ma tha an aon rud bhon sgriobt eile a dh 'fhaodadh an dàrna pàipear-tomhais a bhith ann an uairsin agus an uairsin coimhead air an taobh a-staigh ma thèid aithris a-rithist gus co-dhùnadh am bu chòir tiotalan, tuairisgeulan a shealltainn no a h-uile dad.

Tha an sgriobt sin air a thoirt seachad mar eisimpleir de aithris neadachaidh IF agus tha uiread de rudan ceàrr leis an sgriobt sin gun toireadh e artaigil eile airson a h-uile dad a mhìneachadh. Is e a 'phrìomh chùis nach eil e furasta a chleachdadh.

Smaoinich gu robh thu airson piseach RSS eile a chur ris mar Linux Linux Everyday no Linux Today? Bhiodh an sgriobt gu math mòr agus ma cho-dhùin thu gun robh thu ag iarraidh an aithris taobh a-staigh IF atharrachadh feumaidh tu atharrachadh ann an iomadh àite.

Ged a tha àm agus àite ann airson neadachadh, bu chòir dhaibh a bhith air an cleachdadh gu math. Mar as trice tha dòigh ann airson do chòd ath-ghluasad gus nach fheum thu an IF neadachadh idir. Thig mi chun a 'chuspair seo ann an artaigil san àm ri teachd.

Feuch an-dràsta feuch ris a 'cheist a th' aig daoine a 'dol a-steach do pharamadairean duff a rèiteachadh. Mar eisimpleir anns an sgriobt gu h-àrd ma tha an neach-cleachdaidh a 'dol a-steach rudeigin eile a-mhàin "aboutdotcom" mar an dara paramadair, bidh liosta de artaigilean a' nochdadh bhon RSS feed bho LXER a dh'aindeoin dè an cleachdaiche a th 'ann a-steach no nach eil.

A thuilleadh air an sin mura cuir an neach-cleachdaidh "a h-uile" no "tuairisgeul" a-steach mar a '1mh paraiméadar, is e liosta de na tiotalan a th' ann an-dràsta a dh'fhaodadh a bhith na tha an neach-cleachdaidh an dùil.

Seall air an sgriobt a leanas (no dèan lethbhreac dheth agus cuir a-steach e san fhaidhle rssget.sh agad.

#! / bin / bash

ma tha [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
an uairsin
ma tha [$ 1 = "all"] || [$ 1 = "tuairisgeul"] || [$ 1 = "tiotal"]
an uairsin
ma tha [$ 2 = "timcheall air"]
an uairsin

ma tha [$ 1 = "uile"]
an uairsin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
an uairsin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

eile
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
eile
ma tha [$ 1 = "uile"]
an uairsin
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
an uairsin
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
eile
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Is e a 'chiad rud a tha fa-near a thoirt fa-near gu bheil an sgriobt a-nis a' faighinn cothrom gu math agus faodaidh tu faicinn gu luath mar a tha a-mach à smachd air neadachadh IF faodar aithrisean a thighinn.

Is e an earrann a tha cudromach san sgriobt seo an aithris IF aithris THEN earrann air loidhne 2 agus loidhne 4.

An seasamh airson OR. Mar sin, an loidhne ma tha [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] a ' sgrùdadh a bheil an 2 paramadair co-ionnan ri "aboutdotcom" no "lxer". Mura h-eil e an uair sin, tha an aithris IF crìochnaichte oir chan eil aithris sam bith eile air a 'chuid as motha den IF.

Mar an ceudna air loidhne 4 an loidhne ma tha [$ 1 = "all"] || [$ 1 = "tuairisgeul"] || [$ 1 = "tiotal"] a ' dearbhadh a bheil a' chiad paramadair co-ionnan ri "uile" no "tuairisgeul" no "tiotal".

A-nis ma tha an neach-cleachdaidh a 'ruith rssget.sh caise buntàta cha tèid dad a thoirt air ais ach mus fhaigheadh iad liosta de thiotalan bho LXER.

An taobh mu choinneamh is &&. Tha ionadan & & operatair && airson AND.

Bidh mi a 'dol a dhèanamh air an sgriobt a bhith a' coimhead nas coltaiche ri sgeul-oidhche ach tha e a 'dèanamh an sgrùdadh cudromach gu lèir gus dèanamh cinnteach gu bheil an neach-cleachdaidh air 2 paraimadair a thoirt seachad.

#! / bin / bash

ma tha [$ # -eq 2]
an uairsin

ma tha [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
an uairsin
ma tha [$ 1 = "all"] || [$ 1 = "tuairisgeul"] || [$ 1 = "tiotal"]
an uairsin
ma tha [$ 2 = "timcheall air"]
an uairsin

ma tha [$ 1 = "uile"]
an uairsin
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
an uairsin
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

eile
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
eile
ma tha [$ 1 = "uile"]
an uairsin
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
an uairsin
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
eile
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Is e an aon rud a bharrachd a tha anns an sgriobt seo aithris eile a-muigh IF mar a leanas: ma tha [$ # -eq 2] . Ma leugh thu an artaigil mu pharaimearan cuiridh fios agad gu bheil $ # a 'tilleadh cunntas air an àireamh de pharaimearan cuir a-steach. Tha an -q a 'seasamh airson co-ionannachd. Mar sin, tha aithris IF a 'dearbhadh gu bheil an neach-cleachdaidh a' dol a-steach gu 2 paraimadair agus mura dèanadh iad dìreach a 'falbh às aonais càil. (Gun a bhith gu sònraichte càirdeil).

Tha mi mothachail gu bheil an oideachadh seo a 'faighinn gu math mòr. Chan eil mòran a bharrachd ann airson a bhith a 'còmhdach an t-seachdain seo ach tha mi airson cuideachadh a' sgioblachadh an sgriobt mus cuir sinn crìoch air.

Is e an aon àithne mu dheireadh a dh 'fheumas tu ionnsachadh mu aithrisean co-cheangailte ris an aithris CASE.

#! / bin / bash


ma tha [$ # -eq 2]
an uairsin
cùis $ 2 ann
mu thimcheall)
cùis $ 1 ann
uile)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;;
Tuairisgeul)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;;
tiotal)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;;
esac
;;;
lxer)
cùis $ 1 ann
uile)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;;
Tuairisgeul)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;;
tiotal)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;;
esac
;;;
esac
fi

Tha an aithris cùis na dhòigh nas fheàrr de sgrìobhadh IF ELSE IF ELSE IF ELSE IF.

Mar eisimpleir, an loidsig seo

IF toradh = bananathan
THEN seo
ELSE MA fruit = oranges
THEN seo
ELSE MA measan = fìon-dhearcan
THEN seo
CRÌOCH IF

a bhith air ath-sgrìobhadh mar:

measan cùise ann
bananathan)
dèan seo
;;;
oranges)
dèan seo
;;;
fìon-dhearcan)
dèan seo
;;;
esac

Gu dearbh, is e a 'chiad rud as deidh a' chùis an rud a tha thu a 'dol a choimeas (me measan). An uairsin is e gach nì ro na camagan an rud a tha thu a 'dèanamh coimeas an aghaidh agus ma tha e a' freagairt ris na sreathan roimhe; a 'ruith. Tha aithris cùise air a chrìochnachadh leis an esac cùil (a tha a 'chùis air ais).

Anns an sgriobt rssget.sh tha an aithris cùise a 'toirt cuid den uamhasach uamhasach sin ged nach eil e ga leasachadh gu leòr.

Gus an sgriobt a leasachadh, feumaidh mi thu a thoirt a-steach gu caochladairean.

Seall air a 'chòd a leanas:

#! / bin / bash

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

ma tha [$ # -lt 2] || [$ # -gt 2]
an uairsin
echo "cleachdadh: rssget.sh [all | description | title] [aboutdotcom | lxer]";
fàgail;
fi

cùis $ 1 ann
uile)
display = "- d -l -u"
;;;
Tuairisgeul)
display = "- d -u"
;;;
tiotal)
taisbeanaidh = "- u"
;;;
esac

cùis $ 2 ann
mu thimcheall)
url = $ aboutdotcom;
;;;
lxer)
url = $ lxer;
;;;
esac
rsstail $ display $ url;

Tha caochladair air a mhìneachadh le bhith a 'toirt ainm dha agus an uairsin a' sònrachadh luach dha. Anns an eisimpleir gu h-àrd, tha na leanas nan atharrachaidhean eadar-dhealaichte:

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

Tha an sgriobt an-dràsta nas làimhseachail le bhith a 'cleachdadh atharraichean. Mar eisimpleir tha gach paramadair air a làimhseachadh fa leth agus mar sin chan eil aithrisean IF neadachaidh ann.

Tha an caochladair taisbeanaidh a-nis air a shuidheachadh a rèir a bheil thu a 'taghadh a h-uile dad, tuairisgeul no tiotal agus tha an caochladair url air a shuidheachadh gu luach an caochlaideach mu thimcheall no luach an caochlaideach lxer a rèir an tagh thu mu thimcheall no lxer.

Feumaidh an t-òrdugh rsstail a-nis dìreach luach an taisbeanaidh agus an url a chleachdadh gus a ruith ceart.

Ged a tha caochlaidhean air an suidheachadh dìreach le bhith a 'toirt dhaibh ainm, airson an cleachdadh gu feum feumaidh tu comharradh $ a chur air beulaibh. Ann am faclan eile, tha variable = luach a 'suidheachadh caochlaideach ri luach ach tha caochladh $ a' ciallachadh thoir dhomh susbaint an caochlaideach.

Is e seo a leanas an script mu dheireadh airson an oideachadh seo.

#! / 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"
usage = "usage: rssget.sh [all | description | title] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
display = ""
url = ""

ma tha [$ # -lt 2] || [$ # -gt 2]
an uairsin
echo $ cleachdadh;
fàgail;
fi

cùis $ 1 ann
uile)
display = "- d -l -u"
;;;
Tuairisgeul)
display = "- d -u"
;;;
tiotal)
taisbeanaidh = "- u"
;;;
*)
echo $ cleachdadh;
fàgail;
;;;
esac

cùis $ 2 ann
mu thimcheall)
url = $ aboutdotcom;
;;;
lxer)
url = $ lxer;
;;;
linuxtoday)
url = $ linuxtoday;
;;;
s an Iar-
url = $ everydaylinuxuser;
;;;
*)
echo $ cleachdadh;
fàgail;
esac

rsstail $ display $ url;

Tha an script a tha a 'toirt a-steach a' toirt a-steach barrachd bidhean RSS agus tha caochladh cleachdadh ann a tha ag innse don neach-cleachdaidh mar a chleachdas iad an sgriobt mura h-eil iad a 'cur a-steach 2 atharrachadh no a tha iad a' toirt a-steach roghainnean mì-cheart airson nan atharraichean.

Geàrr-chunntas

Tha seo air a bhith na artaigil mòr agus is dòcha gun deach e ro fhada ro luath. Anns an ath iùl, bidh mi a 'sealltainn dhut na roghainnean coimeas eadar na h-aithrisean IF agus tha mòran a bharrachd ann airson bruidhinn mu atharrachadh.

Tha barrachd ann cuideachd a ghabhas dèanamh gus an sgriobt gu h-àrd a leasachadh agus thèid seo a chòmhdach ann an treòrachadh san àm ri teachd fhad 'sa bhios sinn a' sgrùdadh lùban, briathran cunbhalach agus riaghailteach.

Thoir sùil air mar a nì thu (Dèan sìos sìos air na roinnean airson liosta de artaigilean fhaicinn) earrann de l inux.about.com gus barrachd thurasan feumail a lorg bho Windows booting agus Ubuntu gus inneal-làimhe a chruthachadh le bhith a 'cleachdadh bhogsaichean GNOME .