Mwongozo wa Mwanzo kwa BASH - Masharti na Vigezo

Utangulizi

Karibu sehemu ya tatu ya "Mwongozo wa Mwanzo kwa BASH". Ikiwa umekosa makala mbili zilizopita basi labda unataka kujua nini kinachofanya mwongozo huu uwe tofauti na viongozi wengine vya script za BASH.

Mwongozo huu unaandikwa na mtangazaji kamili kwa BASH na hivyo kama msomaji unajifunza kama ninavyojifunza. Wakati mimi ni mchungaji wa BASH mimi huja kutoka background background programu ingawa mengi ya mambo ambayo mimi imeandikwa imekuwa kwa jukwaa Windows.

Unaweza kuona viongozi wawili wa kwanza kwa kutembelea:

Ikiwa wewe ni mpya kwa script ya BASH mimi kupendekeza kusoma miongozo mawili ya kwanza kabla ya kuendelea na hii.

Katika mwongozo huu nitaonyesha jinsi ya kutumia maneno ya masharti ya kupima pembejeo ya mtumiaji na kudhibiti jinsi script inafanya kazi.

Sakinisha rsstail

Ili kufuata mwongozo huu utahitaji kufunga programu ya mstari wa amri iitwayo rsstail ambayo hutumiwa kusoma feeds RSS .

Ikiwa unatumia aina ya usambazaji wa Debian / Ubuntu / Mint yafuatayo:

sudo apt-get install rsstail

Kwa Fedora / CentOS nk aina ya aina zifuatazo:

Yum kufunga upya

Kwa kufungua salama aina zifuatazo:

Zypper kufunga rsstail

Taarifa ya IF

Fungua terminal na uunda faili inayoitwa rssget.sh kwa kuandika zifuatazo:

sudo nano rssget.sh

Ndani ya mhariri wa nano kuingia maandishi yafuatayo:

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

Hifadhi faili kwa uendelezaji wa CTRL na O na kisha uondoke kwa kushinikiza CTRL na X.

Tumia script kwa kuandika zifuatazo:

sh rssget.sh

Script itarudi orodha ya majina kutoka kwenye malisho ya linux.about.com RSS.

Siyo script yenye manufaa zaidi kwa sababu inapata tu majina kutoka kwa moja ya RSS lakini inachukua kuzingatia njia ya Linux.about.com RSS feed.

Fungua script ya rssget.sh tena kwenye nano na uhariri faili ili uangalie kama ifuatavyo:

#! / bin / bash

ikiwa [$ 1 = "verbose"]
basi
rejea -l -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Tumia script tena kwa kuandika zifuatazo:

sh rssget.sh verbose

Wakati huu feed RSS inarudi na cheo, kiungo na maelezo.

Hebu tuchambue script kwa kina kidogo:

The #! / Bin / bash inaonekana katika kila script tunaandika. Mstari unaofuata unaonekana kwa parameter ya kwanza ya pembejeo iliyotolewa na mtumiaji na kulinganisha na neno "verbose". Ikiwa parameter ya pembejeo na neno "verbose" linalingana na mistari kati ya hapo na fi ni mbio.

Sura ya hapo juu ni dhahiri kibaya. Je, kinachotokea kama huna kutoa parameter ya pembejeo kabisa? Jibu ni kupata kosa pamoja na mistari ya operator zisizotarajiwa.

Faida nyingine kubwa ni kwamba ikiwa hutoa neno "verbose" basi hakuna kitu kinachotokea kabisa. Hasa ikiwa hutoa neno verbose script ingeweza kurudi orodha ya majina.

Tumia nano tena ili hariri faili ya rssget.sh na urekebishe kanuni kama ifuatavyo:

#! / bin / bash

ikiwa [$ 1 = "verbose"]
basi
rejea -l -l -u http://z.about.com/6/o/m/linux_p2.xml;
mwingine
rejea -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Hifadhi faili na uipate kwa kuandika zifuatazo:

sh rssget.sh verbose

Orodha ya majina, maelezo na viungo itaonekana. Sasa kukimbia tena kama ifuatavyo:

sh rssget.sh majina

Wakati huu tu orodha ya majina yanaonekana.

Sehemu ya ziada ya script iko kwenye mstari wa 4 na huanzisha maelezo mengine . Kimsingi script sasa inasema ikiwa parameter ya kwanza ni neno "verbose" kupata maelezo, viungo na vyeo kwa ajili ya kulisha RSS lakini kama parameter ya kwanza ni kitu kingine tu kupata orodha ya majina.

Script imebadilika kidogo lakini bado ni kibaya. Ikiwa unashindwa kuingia parameter bado utapata kosa. Hata kama unatoa parameter, kwa kusema tu hawataki verbose haimaanishi unataka majina tu. Huenda umesema vibaya verbose kwa mfano au huenda ukaweka njiwa ambazo hazi maana.

Kabla ya kujaribu na kufuta masuala haya nataka kukuonyesha amri moja zaidi ambayo huenda na taarifa ya IF.

Badilisha script yako ya rssget.sh ili kuangalia kama ifuatavyo:

#! / bin / bash

ikiwa [$ 1 = "wote"]
basi
rejea -l -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "maelezo"]
basi
rejea -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Niliamua kuondoa neno la verbose na kuibadilisha na wote. Hiyo siyo sehemu muhimu. Script hapo juu inalenga elif ambayo ni njia fupi ya kusema ELSE IF.

Sasa script hufanya kazi kama ifuatavyo. Ikiwa unatumia sh rssget.sh wote unapata maelezo, viungo na majina. Ikiwa badala ya kukimbia maelezo ya rssget.sh utapata tu majina na maelezo. Ikiwa unatoa neno lingine lolote utapata orodha ya majina.

Hii inatia njia ya haraka kuja na orodha ya maneno masharti. Njia mbadala ya kufanya ELIF ni kutumia kile kinachojulikana kama taarifa za nia za IF.

Yafuatayo ni mfano unaoonyesha jinsi kauli ya IF ikiwa ni kazi:

#! / bin / bash

ikiwa [$ 2 = "aboutdotcom"]
basi
ikiwa [$ 1 = "wote"]
basi
rejea -l -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "maelezo"]
basi
rejea -d -u http://z.about.com/6/o/m/linux_p2.xml;

mwingine
rejea -u http://z.about.com/6/o/m/linux_p2.xml;
fi
mwingine
ikiwa [$ 1 = "wote"]
basi
rejea -l -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "maelezo"]
basi
rejea -d -u http://lxer.com/module/newswire/headlines.rss
mwingine
rejea -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Jisikie huru kuandika kila kitu kama unachokipenda au cha nakala na kukiingiza kwenye faili yako ya rssget.sh.

Sura ya juu inalenga parameter ya 2 ambayo inakuwezesha kuchagua aidha "about.com" au "lxer.com".

Ili kukimbia unapiga aina ya zifuatazo:

sh rssget.sh yote kuhusudotcom

au

sh rssget.sh wote lxer

Unaweza shaka kuchukua nafasi zote kwa maelezo au majina ili kutoa maelezo tu au majina tu.

Kimsingi kanuni hapo juu inasema kama parameter ya pili ni juu ya todotcom kisha uangalie pili kama taarifa ambayo ni sawa na script ya awali mwingine kama parameter ya pili ni lxer basi angalia taarifa ya ndani tena ili kuamua kama kuonyesha majina, maelezo au kila kitu.

Script hiyo hutolewa tu kama mfano wa taarifa ya kiota ya IF na kuna mambo mengi mabaya na script hiyo itachukua makala nyingine kuelezea yote. Suala kuu ni kwamba haipatikani.

Fikiria unataka kuongezea RSS nyingine kama vile Daily Linux User au Linux Leo? Script ingekuwa kubwa na ikiwa umeamua kuwa unataka maelezo ya ndani ya IF kubadili ungebidi uibadilishe katika maeneo mengi.

Wakati kuna wakati na nafasi ya IF iliyojaa lazima itumiwe kwa upole. Kwa kawaida kuna njia ya kutafakari code yako ili usihitaji haja ya nia ya IF kabisa. Mimi nitakuja kwenye suala hili katika makala ya baadaye.

Hebu sasa tuangalie kurekebisha suala la watu wanaoingia katika vigezo vya duff. Kwa mfano katika script hapo juu kama mtumiaji anaingia kitu kingine isipokuwa "aboutdotcom" kama parameter ya pili basi orodha ya makala hutokea kutoka kwa rasilimali RSS kutoka LXER bila kujali kama mtumiaji huingia lxer au la.

Kwa kuongeza kama mtumiaji haingii "yote" au "maelezo" kama parameter ya kwanza basi chaguo-msingi ni orodha ya majina ambayo inaweza au sio yale mtumiaji aliyotaka.

Angalia script zifuatazo (au nakala na kuitia kwenye faili yako ya rssget.sh.

#! / bin / bash

ikiwa [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
basi
ikiwa [$ 1 = "yote"] || [$ 1 = "maelezo"] || [$ 1 = "kichwa"]
basi
ikiwa [$ 2 = "aboutdotcom"]
basi

ikiwa [$ 1 = "wote"]
basi
rejea -l -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "maelezo"]
basi
rejea -d -u http://z.about.com/6/o/m/linux_p2.xml;

mwingine
rejea -u http://z.about.com/6/o/m/linux_p2.xml;
fi
mwingine
ikiwa [$ 1 = "wote"]
basi
rejea -l -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "maelezo"]
basi
rejea -d -u http://lxer.com/module/newswire/headlines.rss
mwingine
rejea -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Jambo la kwanza kukumbuka ni kwamba script sasa kupata haki kubwa na unaweza haraka kuona jinsi nje ya kudhibiti nested IF taarifa inaweza kuwa.

Kidogo ambacho ni muhimu katika script hii ni maelezo ya IF || tamko THEN sehemu juu ya mstari wa 2 na mstari wa 4.

Ya || inasimama OR. Hivyo mstari ikiwa [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] hunakili ikiwa parameter ya 2 ni sawa na "aboutdotcom" au "lxer". Ikiwa sivyo taarifa ya IF imekamilika kwa sababu hakuna taarifa nyingine kwa ajili ya nje ya IF.

Vile vile kwenye mstari wa 4 mstari ikiwa [$ 1 = "yote"] || [$ 1 = "maelezo"] || [$ 1 = "kichwa"] hunabagua ikiwa parameter ya 1 ni sawa na "yote" au "maelezo" au "kichwa".

Sasa kama mtumiaji anaendesha sh rssget.sh viazi jibini hakuna kurudi ambapo kabla ya kuwa na kupokea orodha ya majina kutoka LXER.

Kinyume cha || ni &&. Mwandishi wa && anasimama NA.

Nitafanya script kuonekana zaidi kama ndoto lakini inafanya ukaguzi wote muhimu ili kuhakikisha mtumiaji ametoa vigezo 2.

#! / bin / bash

ikiwa [$ # -eq 2]
basi

ikiwa [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
basi
ikiwa [$ 1 = "yote"] || [$ 1 = "maelezo"] || [$ 1 = "kichwa"]
basi
ikiwa [$ 2 = "aboutdotcom"]
basi

ikiwa [$ 1 = "wote"]
basi
rejea -l -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "maelezo"]
basi
rejea -d -u http://z.about.com/6/o/m/linux_p2.xml;

mwingine
rejea -u http://z.about.com/6/o/m/linux_p2.xml;
fi
mwingine
ikiwa [$ 1 = "wote"]
basi
rejea -l -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "maelezo"]
basi
rejea -d -u http://lxer.com/module/newswire/headlines.rss
mwingine
rejea -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Kidogo kidogo ambacho ni ziada katika script hiyo ni maelezo mengine ya nje ya IF kama ifuatavyo: ikiwa [$ # -eq 2] . Ikiwa unasoma makala kuhusu vigezo vya uingizaji utajua kwamba $ # inarudi hesabu ya nambari ya vigezo vya uingizaji. The -eq inasimama sawa. Kwa hiyo, taarifa ya IF inaangalia kwamba mtumiaji aliingia vigezo 2 na kama hawakuondoka bila kufanya chochote. (Sio hasa kirafiki).

Ninafahamu kuwa mafunzo haya yanapata kubwa sana. Hakuna mengi zaidi ya kufunika wiki hii lakini nataka kusaidia kusafisha script kabla ya kumaliza.

Amri moja ya mwisho ambayo unahitaji kujifunza juu ya maneno ya masharti ni taarifa ya CASE.

#! / bin / bash


ikiwa [$ # -eq 2]
basi
Tumia $ 2 ndani
overdotcom)
Tumia $ 1 ndani
yote)
rejea -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
maelezo)
rejea -d -u z.about.com/6/o/m/linux_p2.xml
;;
cheo)
rejea -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
Tumia $ 1 ndani
yote)
rejea -l -l -u http://lxer.com/module/newswire/headlines.rss
;;
maelezo)
rejea -d -u http://lxer.com/module/newswire/headlines.rss
;;
cheo)
rejea -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Taarifa ya kesi ni nicer njia ya kuandika IF ELSE IF ELSE IF ELSE IF.

Kwa mfano mfano huu

Ikiwa matunda = ndizi
Kisha hii
KUTIKA IF = matunda au machungwa
Kisha hii
KAZI IF = matunda = zabibu
Kisha hii
ENDA IF

inaweza kuandikwa tena kama:

matunda ya kesi katika
ndizi)
fanya hili
;;
machungwa)
fanya hili
;;
zabibu)
fanya hili
;;
esac

Kimsingi kipengee cha kwanza baada ya kesi ni kitu ambacho utaenda kulinganisha (yaani matunda). Kisha kila kitu kabla ya mabano ni kitu unachokielezea kinyume na ikiwa kinafanana na mistari iliyotangulia ;; itakuwa mbio. Taarifa ya kesi imekamilika na esac ya reverse (ambayo ni kesi nyuma).

Katika script ya rssget.sh kauli ya kesi huondoa baadhi ya mazao hayo mabaya ingawa sio kuboresha kweli.

Ili kuboresha kweli script mimi haja ya kuanzisha wewe kwa vigezo.

Angalia kanuni iliyofuata:

#! / bin / bash

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

ikiwa [$ # -l 2] || [$ # -gt 2]
basi
Echo "matumizi: rssget.sh [yote | maelezo | title] [aboutdotcom | lxer]";
Utgång;
fi

Tumia $ 1 ndani
yote)
kuonyesha = "- d -l -u"
;;
maelezo)
kuonyesha = "- d -u"
;;
cheo)
kuonyesha = "- u"
;;
esac

Tumia $ 2 ndani
overdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
reta $ kuonyesha $ url;

Tofauti hufafanuliwa kwa kuipa jina na kisha kuitumia thamani. Katika mfano ulio juu, yafuatayo ni wajibu:

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

Script inaweza kusimamia zaidi mara kwa mara kwa kutumia vigezo. Kwa mfano, kila parameter inashughulikiwa tofauti na kwa hiyo hakuna taarifa za IF zilizojaa.

Hali ya kuonyesha sasa imewekwa kulingana na kwamba umechagua yote, maelezo au cheo na variable ya url imewekwa kwa thamani ya todotcom variable au thamani ya variable lxer kulingana na kama ulichagua aboutdotcom au lxer.

Amri ya ustaarabu sasa inapaswa kutumia thamani ya kuonyesha na url ili kukimbia kwa usahihi.

Wakati vigezo vinavyowekwa tu kwa kuwapa jina, kwa kweli hutumia unaweka ishara $ mbele yao. Kwa maneno mengine kutofautiana = thamani huweka tofauti kwa thamani ambapo thamani ya maana ya fedha huwapa mimi yaliyomo ya variable.

Yafuatayo ni script ya mwisho ya mafunzo haya.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
kiladaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
matumizi = "matumizi: rssget.sh [yote | maelezo | title] [lxer | aboutdotcom | kiladaylinuxuser | linuxtoday]"
kuonyesha = ""
url = ""

ikiwa [$ # -l 2] || [$ # -gt 2]
basi
Echo matumizi ya $;
Utgång;
fi

Tumia $ 1 ndani
yote)
kuonyesha = "- d -l -u"
;;
maelezo)
kuonyesha = "- d -u"
;;
cheo)
kuonyesha = "- u"
;;
*)
Echo matumizi ya $;
Utgång;
;;
esac

Tumia $ 2 ndani
overdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
kiladaylinuxuser)
url = $ kiladaylinuxuser;
;;
*)
Echo matumizi ya $;
Utgång;
esac

reta $ kuonyesha $ url;

Script hapo juu inatoa zaidi RSS feeds na kuna variable matumizi ambayo inauambia mtumiaji jinsi ya kutumia script kama wao si kuingia vigezo 2 au wao kuingia chaguzi sahihi kwa ajili ya vigezo.

Muhtasari

Hii imekuwa makala ya epic na huenda ikaenda mbali sana hivi karibuni. Katika mwongozo unaofuata nitakuonyesha chaguzi zote za kulinganisha kwa taarifa za IF na bado kuna mengi zaidi ya kuzungumza juu ya vipengele.

Kuna pia zaidi ambayo inaweza kufanywa ili kuboresha script hapo juu na hii itafunikwa katika viongozi vijavyo wakati sisi kuchunguza loops, grep na maneno ya kawaida.

Angalia jinsi ya (Tembea chini ya makundi ili kuona orodha ya makala) sehemu ya l inux.about.com ili kupata miongozo muhimu zaidi kutoka kwa upigaji wa mara mbili Windows na Ubuntu kuanzisha mashine ya kawaida kutumia masanduku ya GNOME .