Canllaw i Ddechreuwyr BASH - Amodau a Newidynnau

Cyflwyniad

Croeso i drydydd rhan y "Canllaw Dechreuwyr i BASH". Os ydych wedi colli'r ddau erthygl flaenorol yna mae'n debyg y byddwch chi eisiau gwybod beth sy'n gwneud y canllaw hwn yn wahanol i ganllawiau sgriptio BASH eraill.

Mae'r canllaw hwn yn cael ei ysgrifennu gan newyddiadur cyflawn i BASH ac felly fel darllenydd rydych chi'n ei ddysgu wrth i mi ddysgu. Er fy mod i'n newydd i BASH, dwi'n dod o gefndir datblygu meddalwedd er bod y rhan fwyaf o'r pethau yr wyf wedi'u hysgrifennu wedi bod ar gyfer platfform Windows.

Gallwch weld y ddau ganllaw cyntaf trwy ymweld â:

Os ydych chi'n newydd i sgriptio BASH, rwy'n argymell darllen y ddau ganllaw cyntaf cyn parhau gyda'r un.

Yn y canllaw hwn, byddaf yn tynnu sylw at sut i ddefnyddio datganiadau amodol i brofi mewnbwn defnyddwyr a rheoli sut mae sgript yn gweithio.

Gosod rsstail

Er mwyn dilyn y canllaw hwn, bydd angen i chi osod cais llinell gorchymyn o'r enw rsstail a ddefnyddir i ddarllen porthiannau RSS .

Os ydych chi'n defnyddio math dosbarthu Debian / Ubuntu / Mint yn seiliedig ar y canlynol:

sudo apt-get install rsstail

Ar gyfer Fedora / CentOS ac ati, teipiwch y canlynol:

yum gosod rsstail

Ar gyfer openSUSE math y canlynol:

zypper gosod rsstail

Datganiad IF

Agorwch derfynell a chreu ffeil o'r enw rssget.sh trwy deipio'r canlynol:

sudo nano rssget.sh

O fewn yr olygydd nano rhowch y testun canlynol:

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

Arbedwch y ffeil trwy wasgu CTRL ac O ac yna allanwch trwy wasgu CTRL a X.

Rhedeg y sgript trwy deipio'r canlynol:

sh rssget.sh

Bydd y sgript yn dychwelyd rhestr o deitlau o borthiant RSS linux.about.com.

Nid yw'n sgript rhy ddefnyddiol oherwydd ei fod yn adfer y teitlau o un porthiant RSS ond mae'n arbed rhaid i chi gofio'r llwybr i fwyd RSS Linux.about.com.

Agorwch y sgript rssget.sh yn nano eto a golygu'r ffeil i edrych fel a ganlyn:

#! / bin / bash

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

Rhedwch y sgript eto trwy deipio'r canlynol:

sh rssget.sh verbose

Y tro hwn daeth y porthiant RSS yn ôl gyda'r teitl, y cyswllt a'r disgrifiad.

Gadewch i ni ddadansoddi'r sgript mewn ychydig o fanylion:

Mae'r #! / Bin / bash yn ymddangos ym mhob sgript yr ydym yn ei ysgrifennu. Yn y bôn, mae'r linell nesaf yn edrych ar y paramedr mewnbwn cyntaf a ddarperir gan y defnyddiwr ac mae'n ei gymharu â'r gair "verbose". Os yw'r paramedr mewnbwn a'r gair "verbose" yn cyd-fynd â'r llinellau rhwng hynny a fi yn rhedeg.

Mae'r sgript uchod yn amlwg yn ddiffygiol. Beth sy'n digwydd os na fyddwch yn darparu paramedr mewnbwn o gwbl? Yr ateb yw eich bod yn cael gwall ar hyd gweithredwyr annisgwyl.

Y diffyg mawr arall yw, os na fyddwch yn rhoi'r gair "verbose", yna does dim byd yn digwydd o gwbl. Yn ddelfrydol os na fyddwch chi'n darparu'r gair, bydd y sgript yn dychwelyd rhestr o deitlau.

Defnyddiwch nano eto i olygu'r ffeil rssget.sh a diwygio'r cod fel a ganlyn:

#! / bin / bash

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

Cadwch y ffeil a'i redeg trwy deipio'r canlynol:

sh rssget.sh verbose

Bydd rhestr o deitlau, disgrifiadau a dolenni yn ymddangos. Nawr ei redeg eto fel a ganlyn:

teitlau rssget.sh sh

Y tro hwn dim ond rhestr o deitlau sy'n ymddangos.

Mae'r rhan ychwanegol o'r sgript ar lein 4 ac yn cyflwyno'r datganiad arall . Yn y bôn, mae'r sgript yn awr yn dweud os yw'r paramedr cyntaf yw'r gair "verbose" yn cael y disgrifiad, y dolenni a'r teitlau ar gyfer y porthiant RSS ond os yw'r paramedr cyntaf yn unrhyw beth arall dim ond cael rhestr o deitlau.

Mae'r sgript wedi gwella ychydig ond mae'n dal yn ddiffygiol. Os na fyddwch yn mynd i mewn i baramedr, byddwch yn dal i gael gwall. Hyd yn oed os ydych chi'n darparu paramedr, dim ond trwy ddweud nad ydych chi am verb verb does dim olygu eich bod am gael teitlau yn unig. Efallai y byddwch wedi sillafu verbose anghywir er enghraifft neu efallai y bydd gennych chi colomennod wedi'u teipio sydd, wrth gwrs, yn ddiystyr.

Cyn i ni geisio clirio'r materion hyn, rwyf am ddangos i chi un gorchymyn mwy sy'n mynd gyda'r datganiad IF.

Golygu eich sgript rssget.sh i edrych fel a ganlyn:

#! / bin / bash

os [$ 1 = "all"]
yna
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "disgrifiad"]
yna
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Penderfynais gael gwared ar y gair verbose a'i ddisodli gyda phawb. Nid dyna'r rhan bwysig. Mae'r sgript uchod yn cyflwyno elif sy'n ffordd fer o ddweud ELSE OS.

Nawr mae'r sgript yn gweithio fel a ganlyn. Os ydych chi'n rhedeg rssget.sh i gyd, yna cewch ddisgrifiadau, dolenni a theitlau. Os yn lle hynny, rydych chi newydd redeg disgrifiad ssh rssget.sh byddwch ond yn cael teitlau a disgrifiadau. Os ydych chi'n cyflenwi unrhyw air arall, fe gewch restr o deitlau.

Mae hyn yn cyflwyno ffordd o ddod o hyd i restr o ddatganiadau amodol yn gyflym. Dull arall o wneud ELIF yw defnyddio'r hyn a elwir yn ddatganiadau IF nythu.

Mae'r canlynol yn enghraifft sy'n dangos sut mae datganiadau IF nythu yn gweithio:

#! / bin / bash

os [$ 2 = "aboutdotcom"]
yna
os [$ 1 = "all"]
yna
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "disgrifiad"]
yna
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

arall
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
arall
os [$ 1 = "all"]
yna
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "disgrifiad"]
yna
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
arall
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Teimlwch yn rhad ac am ddim i deipio popeth sydd ynddo os ydych chi'n hoffi neu gopïo a'i gludo i mewn i'ch ffeil rssget.sh.

Mae'r sgript uchod yn cyflwyno ail baramedr sy'n eich galluogi i ddewis "about.com" neu "lxer.com" yn fwyd RSS.

Er mwyn ei redeg, byddwch yn teipio yn y canlynol:

sh rssget.sh yr holl aboutdotcom

neu

sh rssget.sh holl lxer

Gallwch wrth gwrs ddisodli popeth gyda disgrifiadau neu deitlau i ddarparu disgrifiadau yn unig neu dim ond teitlau.

Yn y bôn, mae'r cod uchod yn dweud os yw'r ail baramedr yn aboutdotcom yna edrychwch ar yr ail os yw datganiad yr un peth o'r sgript arall os yw'r ail barafedr yn lxer yna edrychwch ar y mewnol os yw datganiad eto i benderfynu a ddylid dangos teitlau, disgrifiadau neu bopeth.

Darperir y sgript honno yn unig fel enghraifft o ddatganiad IF nyth ac mae cymaint o bethau yn anghywir â'r sgript honno, byddai'n cymryd erthygl arall i'w esbonio i gyd. Y prif fater yw nad yw'n anymarferol.

Dychmygwch eich bod eisiau ychwanegu porthiant RSS arall fel Daily User User neu Linux Today? Byddai'r sgript yn dod yn enfawr a phenderfynoch eich bod am i'r datganiad mewnol OS newid byddai'n rhaid i chi ei newid mewn mannau lluosog.

Er bod amser a lle ar gyfer IF nythu dylid eu defnyddio'n anaml. Fel rheol, mae ffordd o ail-osod eich cod fel nad oes angen yr IF arnoch chi o gwbl. Byddaf yn dod i'r pwnc hwn mewn erthygl yn y dyfodol.

Gadewch i ni nawr edrych ar osod problem pobl sy'n mynd i mewn i baramedrau duff. Er enghraifft, yn y sgript uchod os yw'r defnyddiwr yn dod i mewn i rywbeth heblaw "aboutdotcom" fel yr 2il paramedr yna mae rhestr o erthyglau yn ymddangos o borthiant RSS o LXER waeth a yw'r defnyddiwr yn nodi lxer ai peidio.

Yn ogystal, os nad yw'r defnyddiwr yn nodi "pob" neu "ddisgrifiad" fel y paramedr 1af, yna mae'r rhestr ddiofyn yn cynnwys teitlau a all fod yn fwriad gan y defnyddiwr.

Edrychwch ar y sgript ganlynol (neu gopïwch a'i gludo i mewn i'ch ffeil rssget.sh.

#! / bin / bash

os [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
yna
os [$ 1 = "all"] || [$ 1 = "disgrifiad"] || [$ 1 = "title"]
yna
os [$ 2 = "aboutdotcom"]
yna

os [$ 1 = "all"]
yna
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "disgrifiad"]
yna
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

arall
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
arall
os [$ 1 = "all"]
yna
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "disgrifiad"]
yna
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
arall
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Y peth cyntaf i'w nodi yw bod y sgript bellach yn mynd yn eithaf mawr a gallwch weld yn gyflym sut y gall datganiadau IF ddod i ben heb eu rheoli.

Y peth sy'n bwysig yn y sgript hon yw datganiad IF || datganiad HAN adran ar linell 2 a llinell 4.

Y || yn sefyll am NEU. Felly, y llinell os [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] yn gwirio a yw'r ail paramedr yn hafal i "aboutdotcom" neu "lxer". Os nad ydyw, yna mae'r datganiad IF wedi'i gwblhau oherwydd nad oes unrhyw ddatganiad ar gyfer y rhan fwyaf o IF.

Yn yr un modd ar linell 4 y llinell os [$ 1 = "all"] || [$ 1 = "disgrifiad"] || [$ 1 = "title"] yn gwirio a yw'r paramedr 1af yn hafal i "bob" neu "ddisgrifiad" neu "title".

Nawr os yw'r defnyddiwr yn rhedeg caws tatws rssget.sh rssget.sh ni ddychwelir dim ond cyn y byddent wedi derbyn rhestr o deitlau o LXER.

Y gwrthwyneb gyfer || yw &&. Mae'r gweithredwr && yn sefyll ar gyfer AND.

Rwyf am wneud y sgript yn edrych yn fwy tebyg i hunllef ond mae'n gwneud y gwiriad hollbwysig i sicrhau bod y defnyddiwr wedi darparu 2 baramedr.

#! / bin / bash

os [$ # -eq 2]
yna

os [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
yna
os [$ 1 = "all"] || [$ 1 = "disgrifiad"] || [$ 1 = "title"]
yna
os [$ 2 = "aboutdotcom"]
yna

os [$ 1 = "all"]
yna
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "disgrifiad"]
yna
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

arall
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
arall
os [$ 1 = "all"]
yna
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "disgrifiad"]
yna
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
arall
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Yr unig darn sy'n ychwanegol yn y sgript honno yw datganiad allanol allanol arall fel a ganlyn: os [$ # -eq 2] . Os ydych chi'n darllen yr erthygl am baramedrau mewnbwn, byddwch chi'n gwybod bod $ # yn dychwelyd cyfrif o nifer y paramedrau mewnbwn. Mae'r -eq yn sefyll am gydraddau. Felly, mae'r datganiad IF yn gwirio bod y defnyddiwr wedi cofrestru 2 baramedr ac os nad oedden nhw ddim ond yn ymadael heb wneud unrhyw beth. (Ddim yn arbennig o gyfeillgar).

Rwy'n ymwybodol bod y tiwtorial hwn yn mynd yn eithaf mawr. Nid oes llawer mwy i'w gynnwys yr wythnos hon ond rwyf am helpu i dacluso'r sgript cyn i ni orffen.

Yr un gorchymyn olaf y mae angen i chi ei ddysgu am ddatganiadau amodol yw'r datganiad CASE.

#! / bin / bash


os [$ # -eq 2]
yna
achos $ 2 yn
aboutdotcom)
achos $ 1 yn
I gyd)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
disgrifiad)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
teitl)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
achos $ 1 yn
I gyd)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
disgrifiad)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
teitl)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Mae'r datganiad achos yn ffordd well o ysgrifennu OS ELSE OS ELSE OS ELSE OS.

Er enghraifft, y rhesymeg hwn

OS ffrwythau = bananas
NEN hyn
ELSE OS ffrwythau = orennau
NEN hyn
ELSE OS ffrwythau = grawnwin
NEN hyn
DIWEDD OS

Gellir ei ailysgrifennu fel:

ffrwythau achos yn
bananas)
gwnewch hyn
;;
orennau)
gwnewch hyn
;;
grawnwin)
gwnewch hyn
;;
esac

Yn y bôn, yr eitem gyntaf ar ôl yr achos yw'r peth yr ydych yn mynd i'w gymharu (hy ffrwyth). Yna, pob eitem cyn y cromfachau yw'r peth yr ydych yn ei gymharu yn ei erbyn ac os yw'n cyd-fynd â'r llinellau sy'n rhagweld ;; yn cael ei redeg. Caiff datganiad achos ei derfynu gyda'r esac cefn (sy'n wir yn ôl).

Yn y sgript rssget.sh, mae'r datganiad achos yn dileu rhywfaint o'r nythu hynod ofnadwy er nad yw'n wirioneddol ei wella'n ddigon.

I wella'r sgript wir, mae angen i mi gyflwyno newidynnau i chi.

Edrychwch ar y cod canlynol:

#! / bin / bash

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

os [$ # -lt 2] || [$ # -gt 2]
yna
adleisio "defnydd: rssget.sh [all | description | title] [aboutdotcom | lxer]";
ymadael;
fi

achos $ 1 yn
I gyd)
arddangos = "- d -l -u"
;;
disgrifiad)
arddangos = "- d -u"
;;
teitl)
arddangos = "- u"
;;
esac

achos $ 2 yn
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

Diffinnir newidyn trwy roi enw iddo ac yna'n neilltuo gwerth iddo. Yn yr enghraifft uchod mae'r canlynol yn aseiniadau newidiol:

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

Mae'r sgript ar unwaith yn fwy hylaw trwy ddefnyddio newidynnau. Er enghraifft, caiff pob paramedr ei drin ar wahân ac felly nid oes unrhyw ddatganiadau IF nythu.

Mae'r newidyn arddangos bellach wedi'i osod yn dibynnu a ydych chi wedi dewis yr holl, y disgrifiad neu'r teitl a bod y newidyn url wedi'i osod i werth y newidyn aboutdotcom neu werth y newidyn lxer yn dibynnu a ydych chi'n dewis aboutdotcom neu lxer.

Mae'n rhaid i'r gorchymyn rsstail nawr ddefnyddio gwerth yr arddangosfa a'r url i'w redeg yn gywir.

Er bod newidynnau yn cael eu gosod yn unig trwy roi enw iddynt, i'w defnyddio mewn gwirionedd, mae'n rhaid ichi osod arwydd $ o flaen iddynt. Mewn geiriau eraill, mae variable = value yn gosod newidyn i werth tra mae $ variable yn golygu rhoi cynnwys y newidyn i mi.

Dyma'r sgript derfynol ar gyfer y tiwtorial hwn.

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

os [$ # -lt 2] || [$ # -gt 2]
yna
adleisio $ defnydd;
ymadael;
fi

achos $ 1 yn
I gyd)
arddangos = "- d -l -u"
;;
disgrifiad)
arddangos = "- d -u"
;;
teitl)
arddangos = "- u"
;;
*)
adleisio $ defnydd;
ymadael;
;;
esac

achos $ 2 yn
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
adleisio $ defnydd;
ymadael;
esac

rsstail $ display $ url;

Mae'r sgript uchod yn cyflwyno mwy o borthiant RSS ac mae yna newidyn defnydd sy'n dweud wrth y defnyddiwr sut i ddefnyddio'r sgript os na fyddant naill ai'n nodi 2 newidyn neu maen nhw'n rhoi dewisiadau anghywir ar gyfer y newidynnau.

Crynodeb

Mae hwn wedi bod yn erthygl epig ac efallai ei fod wedi mynd yn rhy bell yn rhy fuan. Yn y canllaw nesaf, byddaf yn dangos yr holl opsiynau cymhariaeth i chi ar gyfer datganiadau OS ac mae llawer mwy i'w drafod o ran newidynnau.

Mae yna hefyd fwy y gellir ei wneud i wella'r sgript uchod a bydd hyn yn cael ei gynnwys mewn canllawiau yn y dyfodol wrth i ni archwilio dolenni, mynegiadau cywir a rheolaidd.

Edrychwch ar yr adran Sut i (I lawr i lawr y categorïau i weld rhestr o erthyglau) i l inux.about.com i ddod o hyd i fwy o ganllawiau defnyddiol o ddefnyddio Windows a Ubuntu deuol i sefydlu peiriant rhithwir gan ddefnyddio blychau GNOME .