Byrjendur Guide til BASH - Skilyrði og breytur

Kynning

Velkomin í þriðja hluta "Byrjandi Guide til BASH". Ef þú hefur misst af síðustu tveimur greinum þá muntu líklega vilja vita hvað gerir þessa handbók frábrugðin öðrum BASH forskriftarþarfir.

Þessi handbók er skrifuð af heill nýliði til BASH og svo sem lesandi sem þú lærir eins og ég læri. Þó ég sé nýliði í BASH, þá kem ég frá hugbúnaðarþróunarbakgrunni, þótt flestar hlutir sem ég hef skrifað hafi verið fyrir Windows vettvang.

Þú getur séð fyrstu tvær leiðsögurnar með því að heimsækja:

Ef þú ert nýr í BASH forskriftarþarfir mælum ég með að þú lesir fyrstu tvær leiðsögurnar áður en þú heldur áfram með þennan.

Í þessari handbók mun ég leggja áherslu á hvernig á að nota skilyrt yfirlýsingar til að prófa notandaskipti og til að stjórna því hvernig handrit virkar.

Setja upp rsstail

Til þess að fylgja þessum leiðbeiningum þarftu að setja upp stjórn lína forrit sem heitir rsstail sem er notað til að lesa RSS straumar .

Ef þú notar Debian / Ubuntu / Mint byggð dreifingu skaltu slá eftirfarandi:

sudo líklegur til að setja upp rsstail

Fyrir Fedora / CentOS etc skrifaðu eftirfarandi:

Þú ert að setja upp rsstail

Fyrir openSUSE skrifaðu eftirfarandi:

setja upp rsstail

IF yfirlýsingin

Opnaðu flugstöðina og búa til skrá sem heitir rssget.sh með því að slá inn eftirfarandi:

sudo nano rssget.sh

Innan nano ritstjóri sláðu inn eftirfarandi texta:

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

Vista skrána með því að ýta á CTRL og O og þá hætta með því að ýta á CTRL og X.

Hlaupa handritið með því að slá inn eftirfarandi:

sk rssget.sh

Handritið mun skila lista yfir titla úr linux.about.com RSS straumnum.

Það er ekki of gagnlegt forskrift vegna þess að það er bara að sækja titla frá einum RSS-straumi en það þýðir að vista þarf að muna slóðina á Linux.about.com RSS strauminn.

Opnaðu rssget.sh handritið í nano aftur og breyttu skránni til að líta svo út:

#! / bin / bash

ef [$ 1 = "stórkostlegt"]
Þá
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Hlaupa handritið aftur með því að slá inn eftirfarandi:

sh rssget.sh veruleika

Í þetta sinn kemur RSS straumurinn aftur með titlinum, tengilinn og lýsingunni.

Við skulum greina handritið í smáatriðum:

The #! / Bin / bash birtist í öllum skriftum sem við skrifum. Næsta lína lítur fyrst og fremst á fyrstu innsláttaraðferðina sem notandinn býður upp á og samanstendur af því við orðið "verbose". Ef inntak breytu og orðið "verbose" passar við línurnar milli þá og fi eru hljóp.

Ofangreind handrit er augljóslega gölluð. Hvað gerist ef þú gefur ekki inntaksmæli yfirleitt? Svarið er að þú færð mistök eftir óvæntum rekstraraðila.

Hinn helsta galli er að ef þú gefur ekki orðið "sanna" þá gerist ekkert á öllum. Helst ef þú gefur ekki orðið orðað, þá mun handritið skila lista yfir titla.

Notaðu nano aftur til að breyta rssget.sh skránni og breyta kóðanum sem hér segir:

#! / bin / bash

ef [$ 1 = "stórkostlegt"]
Þá
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
Annar
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Vista skrána og hlaupa með því að slá inn eftirfarandi:

sh rssget.sh veruleika

Listi yfir titla, lýsingar og tengla birtist. Keyrðu nú aftur það sem hér segir:

sh rssget.sh titlar

Þessi tími birtist bara listi yfir titla.

The auka hluti af handritinu er á línu 4 og kynnir annað yfirlýsingu. Í grundvallaratriðum segir handritið að ef fyrsta breytu er orðið "sanna" þá fáðu lýsingu, tengla og titla fyrir RSS strauminn en ef fyrsta breytu er eitthvað, þá er bara að fá lista yfir titla.

Handritið hefur batnað lítillega en er enn gölluð. Ef þú mistakast inn í breytu verður þú enn með mistök. Jafnvel ef þú veitir breytu, bara með því að segja að þú viljir ekki vísa þýðir ekki að þú vilt aðeins titla. Þú gætir hafa skrifað réttlátur til dæmis rangt til dæmis eða þú gætir hafa slegið dúfur sem er auðvitað tilgangslaust.

Áður en við reynum að hreinsa þessi mál vil ég sýna þér eina skipun sem fylgir IF yfirlýsingunni.

Breyta rssget.sh handritinu þínu til að líta svo út:

#! / bin / bash

ef [$ 1 = "allt"]
Þá
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "lýsing"]
Þá
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Ég ákvað að losna við orðið verbose og skipta því út með öllu. Það er ekki mikilvægur hluti. Handritið hér að ofan kynnir Elif sem er stutt leið til að segja ELSE IF.

Nú virkar handritið sem hér segir. Ef þú keyrir sk rssget.sh þá færðu lýsingar, tengla og titla. Ef í staðinn ertu bara að keyra á rssget.sh lýsingu þá færðu bara titla og lýsingar. Ef þú gefur einhverju öðru orði þá færðu lista yfir titla.

Þetta kynnir leið til að fljótt koma upp með lista yfir skilyrt yfirlýsingar. Önnur leið til að gera ELIF er að nota það sem er þekkt sem innbyggð IF yfirlýsing.

Eftirfarandi er dæmi um hvernig hreiður IF yfirlýsingar vinna:

#! / bin / bash

ef [$ 2 = "umdotcom"]
Þá
ef [$ 1 = "allt"]
Þá
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "lýsing"]
Þá
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

Annar
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
Annar
ef [$ 1 = "allt"]
Þá
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "lýsing"]
Þá
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
Annar
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Feel frjáls til að slá allt það inn ef þú vilt eða afrita og líma það inn í rssget.sh skrána þína.

Ofangreint handrit kynnir 2. breytu sem leyfir þér að velja annaðhvort "about.com" eða "lxer.com" sem RSS-straum.

Til að keyra það skrifarðu inn eftirfarandi:

Þú ert ekki innskráð / ur

eða

Þú ert með rssget.sh alla lxer

Þú getur auðvitað skipt öllum með lýsingar eða titlum til að gefa aðeins lýsingar eða bara titla.

Í grundvallaratriðum kóðinn hér að ofan segir ef seinni breytu er umdotcom þá líta á seinni ef yfirlýsingu sem er sú sama frá fyrri handriti annars ef seinna breytu er lxer þá líta á innri ef yfirlýsingu aftur til að ákveða hvort að sýna titla, lýsingar eða allt.

Þessi handrit er eingöngu lýst sem dæmi um hreiður IF yfirlýsingu og það eru svo margir hlutir sem eru rangar með því að handritið myndi taka aðra grein til að útskýra þá alla. Helsta málið er að það er ekki stigstærð.

Ímyndaðu þér að þú vildir bæta við öðru RSS-straumi eins og Everyday Linux User eða Linux Today? Handritið myndi verða mikið og ef þú ákvað að þú vildir að innri IF yfirlýsingin myndi breytast yrði þú að breyta því á mörgum stöðum.

Þó að það sé tími og staður fyrir hreiður IF, þá ætti það að nota með hnitmiðuðum hætti. Það er yfirleitt leið til að endurspegla kóðann þinn þannig að þú þurfir ekki nefnt IF yfirleitt. Ég mun komast að þessu efni í framtíðinni.

Skulum nú líta á að ákveða málið af fólki sem slærð inn breytur. Til dæmis í handritinu hér fyrir ofan ef notandinn slær inn eitthvað annað en "umdotcom" sem 2. breytu birtist listi af greinum úr RSS straumnum frá LXER, óháð því hvort notandinn slær inn lxer eða ekki.

Að auki ef notandinn slær ekki inn "allt" eða "lýsingu" sem 1. breytu þá er sjálfgefið listi yfir titla sem kunna að vera það sem notandinn ætlaði.

Skoðaðu eftirfarandi handrit (eða afritaðu og líma það inn í rssget.sh skrána þína.

#! / bin / bash

ef [$ 2 = "umdotcom"] || [$ 2 = "lxer"]
Þá
ef [$ 1 = "allt"] || [$ 1 = "lýsing"] || [$ 1 = "titill"]
Þá
ef [$ 2 = "umdotcom"]
Þá

ef [$ 1 = "allt"]
Þá
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "lýsing"]
Þá
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

Annar
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
Annar
ef [$ 1 = "allt"]
Þá
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "lýsing"]
Þá
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
Annar
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Það fyrsta sem þarf að hafa í huga er að handritið er nú að verða tiltölulega stórt og þú getur fljótt séð hvernig óstöðugir IF yfirlýsingar geta orðið.

Stundurinn sem er mikilvægur í þessu handriti er IF yfirlýsingin || yfirlýsingu þá hluti á línu 2 og lína 4.

The || stendur fyrir OR. Svo línan ef [$ 2 = "umdotcom"] || [$ 2 = "lxer"] stöðva hvort 2. breytu er jöfn "umdotcom" eða "lxer". Ef það er ekki þá er IF yfirlýsingin lokið vegna þess að það er engin önnur yfirlýsing fyrir ytri flestar IF.

Á sama hátt á línu 4 línuna ef [$ 1 = "allt"] || [$ 1 = "lýsing"] || [$ 1 = "titill"] athugar hvort 1. breyturinn er jöfn "annað" eða "lýsing" eða "titil".

Nú ef notandi keyrir rssget.sh kartöflur ostur er ekkert skilað en áður en þeir hefðu fengið lista yfir titla frá LXER.

Öfugt við || er &&. && símafyrirtækið stendur fyrir AND.

Ég ætla að gera handritið útlit meira eins og martröð en það gerir allt sem þarf til að tryggja að notandinn hafi gefið 2 breytur.

#! / bin / bash

ef [$ # -eq 2]
Þá

ef [$ 2 = "umdotcom"] || [$ 2 = "lxer"]
Þá
ef [$ 1 = "allt"] || [$ 1 = "lýsing"] || [$ 1 = "titill"]
Þá
ef [$ 2 = "umdotcom"]
Þá

ef [$ 1 = "allt"]
Þá
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "lýsing"]
Þá
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

Annar
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
Annar
ef [$ 1 = "allt"]
Þá
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "lýsing"]
Þá
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
Annar
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Eina hluti sem er aukalega í handritinu er annar ytri IF yfirlýsing sem hér segir: ef [$ # -eq 2] . Ef þú lest greinina um innsláttarbreytur, muntu vita að $ # skilar fjölda fjölda inntaksbreytinga. The -eq stendur fyrir jafnrétti. Í IF yfirlýsingu er því að athuga hvort notandinn hafi slegið inn 2 breytur og ef þeir gerðu það ekki hættir það bara án þess að gera neitt. (Ekki sérstaklega vingjarnlegur).

Ég er meðvitaður um að þessi einkatími er að verða nokkuð stór. Það er ekki mikið meira að ná í þessari viku en ég vil hjálpa að hreinsa handritið áður en við lýkur.

Eina síðasta stjórnin sem þú þarft að læra um skilyrt yfirlýsingar er CASE yfirlýsingin.

#! / bin / bash


ef [$ # -eq 2]
Þá
Málið er $ 2 í
umdotcom)
Málið er $ 1 í
allt)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
lýsing)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
titill)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
Málið er $ 1 í
allt)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
lýsing)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
titill)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Málstilkynningin er ágætari leið til að skrifa IF ELSE IF ELSE IF IF IF.

Til dæmis þetta rökfræði

IF ávextir = bananar
Þá þetta
ELSE IF ávextir = appelsínur
Þá þetta
ELSE IF ávöxtur = vínber
Þá þetta
ENDA IF

má endurskrifa sem:

tilfelli ávöxtur í
bananar)
gerðu þetta
;;
appelsínur)
gerðu þetta
;;
vínber)
gerðu þetta
;;
esac

Í grundvallaratriðum er fyrsta hlutinn eftir málið það sem þú ert að fara að bera saman (þ.e. ávöxtur). Þá er hvert atriði fyrir svigaina það sem þú ert að bera saman og ef það passar við línurnar áður ;; verður hljóp. Mályfirlýsing er sagt upp með öfugri esac (sem er að baki).

Í rssget.sh handritinu fjallar umfjöllunin um nokkuð af því hræðilegu hreiður en þó ekki raunverulega að bæta það nóg.

Til að bæta handritið þarf ég að kynna þér breytur.

Horfðu á eftirfarandi kóða:

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
umdotcom = "z.about.com/6/o/m/linux_p2.xml"
sýna = ""
url = ""

ef [$ # -lt 2] || [$ # -gt 2]
Þá
echo "notkun: rssget.sh [all | description | title] [umdotcom | lxer]";
hætta;
fi

Málið er $ 1 í
allt)
sýna = "- d -l -u"
;;
lýsing)
sýna = "- d -u"
;;
titill)
sýna = "- þú"
;;
esac

Málið er $ 2 í
umdotcom)
url = $ umdotcom;
;;
lxer)
url = $ lxer;
;;
esac
Rsstail $ sýna $ url;

Breytu er skilgreind með því að gefa henni nafn og þá gefa það gildi. Í dæminu hér fyrir ofan eru eftirfarandi breytur:

lxer = "lxer.com/module/newswire/headlines.rss"
umdotcom = "z.about.com/6/o/m/linux_p2.xml"
sýna = ""
url = ""

Handritið er þegar í stað meðhöndlað með því að nota breytur. Til dæmis er hver breytur meðhöndluð sérstaklega og því eru engar nefndir IF yfirlýsingar.

Skjábreytan er nú stillt eftir því hvort þú valdir allt, lýsingu eða titil og url breytu er stillt á gildi umdotcom breytu eða gildi lxer breytu eftir því hvort þú valdir umdotcom eða lxer.

Rsstail skipunin þarf nú bara að nota gildi skjásins og vefslóðarinnar til að keyra rétt.

Þó að breytur séu settar bara með því að gefa þeim nafn, til að nota þau þá þarftu að setja $ tákn fyrir framan þá. Með öðrum orðum breytilegt = gildi setur breytilegt við gildi en $ breytilegt þýðir að gefa mér innihald breytu.

Eftirfarandi er lokaprófið fyrir þessa kennslu.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
umdotcom = "z.about.com/6/o/m/linux_p2.xml"
everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
notkun = "notkun: rssget.sh [all | lýsing | titill] [lxer | umdotcom | everydaylinuxuser | linuxtoday]"
sýna = ""
url = ""

ef [$ # -lt 2] || [$ # -gt 2]
Þá
echo $ notkun;
hætta;
fi

Málið er $ 1 í
allt)
sýna = "- d -l -u"
;;
lýsing)
sýna = "- d -u"
;;
titill)
sýna = "- þú"
;;
*)
echo $ notkun;
hætta;
;;
esac

Málið er $ 2 í
umdotcom)
url = $ umdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ notkun;
hætta;
esac

Rsstail $ sýna $ url;

Ofangreint handrit kynnir fleiri RSS straumar og það er notendabreyting sem segir notandanum hvernig á að nota handritið ef þeir slá heldur ekki inn 2 breytur eða sláðu inn rangar valkostir fyrir breyturnar.

Yfirlit

Þetta hefur verið epic grein og kann að hafa farið of langt. Í næstu handbók mun ég sýna þér allar samanburðarvalkostir fyrir IF yfirlýsingar og enn er margt fleira að tala um með tilliti til breytinga.

Það er líka meira sem hægt er að gera til að bæta ofangreint handrit og þetta verður fjallað í framtíðarleiðsögumenn þegar við skoðum lykkjur, greip og reglulegar segðir.

Skoðaðu hvernig á að (fletta niður fyrirfram flokka til að sjá lista yfir greinar) hluta l inux.about.com til að finna fleiri gagnlegar handbækur frá tvískiptur stígvél Windows og Ubuntu til að setja upp sýndarvél með GNOME-reiti .