Débutan Gid Pou BASH - Kondisyon ak varyab

Entwodiksyon

Byenveni nan twazyèm pati nan "Débutan Gid pou BASH". Si ou te manke atik yo de anvan yo Lè sa a, ou pwal pwobableman vle konnen ki sa ki fè gid sa a diferan nan lòt Gid scripting BASH.

Gid sa a ap ekri pa yon inisyasyon konplè pou BASH e konsa kòm yon lektè ou aprann jan mwen aprann. Pandan ke mwen se yon inisyasyon BASH mwen soti nan yon background devlopman lojisyèl byenke pi fò nan bagay la ke mwen te ekri ki te pou platfòm la Windows.

Ou ka wè premye gid yo pa vizite:

Si ou nouvo nan ekriti BASH mwen rekòmande pou li lekti premye gid yo anvan kontinye ak yon sèl sa a.

Nan gid sa a mwen pral en ki jan yo sèvi ak deklarasyon kondisyonèl yo teste D 'itilizatè yo ak kontwole ki jan yon script fonksyone.

Enstale rsstail

Yo nan lòd yo swiv gid sa a ou pral bezwen enstale yon aplikasyon liy liy ki rele rsstail ki itilize li RSS Feeds .

Si w ap itilize yon Debian / Ubuntu / Mint distribisyon ki baze sou kalite sa a:

sudo nimewo-jwenn enstale rsstail

Pou Fedora / CentOS elatriye sa ki annapre yo:

yum enstale rsstail

Pou kalite openSUSE sa yo:

zypper enstale rsstail

Deklarasyon an SI

Louvri yon tèminal epi kreye yon dosye rele rssget.sh lè ou tape bagay sa yo:

sudo nano rssget.sh

Nan editè a nano antre nan tèks sa a:

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

Sove dosye a pa peze CTRL ak O ak Lè sa a, sòti pa peze CTRL ak X.

Kouri script la lè ou tape bagay sa yo:

sh rssget.sh

Script la ap retounen yon lis tit nan linux.about.com RSS feed la.

Li se pa yon script trè itil paske li jis rekupere tit yo soti nan yon RSS feed men li sove gen sonje chemen an RSS la RSS feed.about.com.

Louvri rssget.sh script nan nano ankò epi modifye dosye a gade jan sa a:

#! / bin / bash

si [$ 1 = "entèwo"]
lè sa a
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Kouri script la ankò lè ou tape bagay sa yo:

sh rssget.sh ranbousman

Fwa sa a RSS a manje tounen ak tit, lyen ak deskripsyon.

Ann analize script la nan yon ti detay:

#! / Bin / bash parèt nan chak script nou ekri. Liy nan pwochen fondamantalman parèt nan paramèt yo opinyon premye ki ofri pa itilizatè a ak konpare li nan mo "entèdiksyon an". Si paramètres a opinyon ak mo "verbose" la alimèt liy ki genyen ant Lè sa a, ak fi yo kouri.

Se script ki anlè a evidamman defekte. Kisa k ap pase si ou pa bay yon paramèt opinyon nan tout? Repons lan se ou jwenn yon erè sou liy yo nan operatè inatandi.

Lòt defo nan pi gwo se ke si ou pa bay pawòl Bondye a "entèpretasyon" Lè sa a, pa gen anyen k ap pase nan tout. Idealman si ou pa bay mo a entèpretasyon script la ta retounen yon lis tit.

Sèvi ak nano ankò pou modifye rssget.sh fichier Et amande kòd la jan sa a:

#! / bin / bash

si [$ 1 = "entèwo"]
lè sa a
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Sove dosye a epi kouri li lè ou tape bagay sa yo:

sh rssget.sh ranbousman

Yon lis tit, deskripsyon ak lyen ap parèt. Koulye a, kouri l 'ankò jan sa a:

sh rssget.sh tit

Fwa sa a jis yon lis tit parèt.

Pati siplemantè nan script la se sou liy 4 ak entwodui lòt deklarasyon an. Fondamantalman script la kounye a di si paramèt nan premye se mo "vèb" jwenn deskripsyon an, lyen ak tit pou RSS feed la, men si paramèt nan premye se nenpòt lòt bagay jis jwenn yon lis tit.

Script la amelyore yon ti kras, men se toujou defekte. Si ou fail antre nan yon paramèt ou ap toujou jwenn yon erè. Menm si ou bay yon paramèt, jis pa di ou pa vle verbose pa vle di ou vle tit sèlman. Ou ka jis eple move entèprete pou egzanp oswa ou ka gen tape pijon ki se nan kou san sans.

Anvan nou eseye ak klè pwoblèm sa yo mwen vle montre ou yon lòt kòmandman ki ale ak deklarasyon an SI.

Edit rssget.sh script ou a gade jan sa a:

#! / bin / bash

si [$ 1 = "tout"]
lè sa a
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsyon"]
lè sa a
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Mwen deside debarase m de pawòl vèbal la ak ranplase li ak tout. Sa se pa pati enpòtan. Script ki pi wo a entwodui elif ki se yon fason kout pou li di ELSE SI.

Koulye a, script la ap travay jan sa a. Si ou kouri sh rssget.sh tout Lè sa a, ou jwenn deskripsyon, lyen ak tit. Si olye ou jis kouri sh rssget.sh deskripsyon ou pral jis jwenn tit ak deskripsyon. Si ou bay nenpòt ki lòt mo ou pral jwenn yon lis tit.

Sa a entwodui yon fason pou byen vit vini ak yon lis deklarasyon kondisyonèl. Yon fason altènatif pou fè ELIF se sèvi ak sa yo konnen kòm enbrike deklarasyon SI.

Sa ki anba la a se yon egzanp ki montre ki jan enbrike IF deklarasyon travay:

#! / bin / bash

si [$ 2 = "aboutdotcom"]
lè sa a
si [$ 1 = "tout"]
lè sa a
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsyon"]
lè sa a
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
lòt moun
si [$ 1 = "tout"]
lè sa a
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskripsyon"]
lè sa a
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Ezite tape tout sa ki nan si ou renmen oswa kopye epi kole li nan dosye rssget.sh ou.

Scripts ki pi wo a entwodui yon paramèt 2nd ki pèmèt ou chwazi swa "about.com" oswa "lxer.com" yon RSS feed.

Pou kouri li ou tape nan sa ki annapre yo:

sh rssget.sh tout aboutdotcom

oswa

sh rssget.sh tout lxer

Ou ka nan kou ranplase tout ak deskripsyon oswa tit bay sèlman deskripsyon oswa jis tit.

Fondamantalman kòd la pi wo a di si paramèt nan dezyèm se aboutdotcom Lè sa a, gade nan dezyèm lan si deklarasyon ki se youn nan menm soti nan script la anvan lòt si paramèt nan dezyèm se lxer Lè sa a, gade nan enteryè a si deklarasyon ankò pou deside si yo montre tit, deskripsyon oswa tout bagay.

Script sa a bay piman kòm yon egzanp yon deklarasyon enbrike SI epi gen anpil bagay ki mal ak ki script li ta pran yon lòt atik yo eksplike yo tout. Pwoblèm prensipal la se ke li pa évolutive.

Imajine ou te vle ajoute yon lòt RSS feed tankou chak jou itilizatè Linux oswa Linux Jodi a? Script la ta vin yon gwo e si ou deside ke ou te vle deklarasyon anndan IF pou chanje ou ta dwe chanje li nan plizyè kote.

Tou gen yon tan ak kote pou yon enbrike si yo ta dwe itilize ti kras. Gen anjeneral yon fason yo refactor kòd ou pou ke ou pa bezwen enbrike a nan tout. Mwen pral vini sou sijè sa a nan yon atik nan lavni.

Ann gade kounye a nan repare pwoblèm nan nan moun k ap antre nan paramèt Duff. Pou egzanp nan script ki anwo a si itilizatè a antre nan yon lòt bagay pase "aboutdotcom" kòm paramèt nan 2nd Lè sa a, yon lis atik parèt nan RSS feed la soti nan LXER kèlkeswa si itilizatè a antre nan lxer oswa ou pa.

Anplis de sa si itilizatè a pa antre nan "tout" oswa "deskripsyon" kòm paramèt nan 1st Lè sa a, default la se yon lis tit ki ka oswa ou pa dwe sa ki itilizatè a gen entansyon.

Gade nan script ki anba la a (oswa kopye epi kole li nan dosye rssget.sh ou.

#! / bin / bash

si [$ 2 = "aboutdotcom"] | [$ 2 = "lxer"]
lè sa a
si [$ 1 = "tout"] || [$ 1 = "deskripsyon"] | [$ 1 = "tit"]
lè sa a
si [$ 2 = "aboutdotcom"]
lè sa a

si [$ 1 = "tout"]
lè sa a
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsyon"]
lè sa a
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
lòt moun
si [$ 1 = "tout"]
lè sa a
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskripsyon"]
lè sa a
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Premye bagay yo sonje se ke script la kounye a ap resevwa jistis gwo, epi ou ka byen vit wè ki jan soti nan kontwòl enbrike SI deklarasyon ka vin.

Ti jan an ki enpòtan nan script sa a se deklarasyon an SI || deklarasyon SA a seksyon sou liy 2 ak liy 4.

The || kanpe pou OSWA. Se konsa, liy lan si [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] chèk si wi ou non paramèt 2nd la egal a "aboutdotcom" oswa "lxer". Si se pa Lè sa a, deklarasyon an SI se konplè paske pa gen okenn lòt deklarasyon pou deyò ki pi IF.

Menm jan an tou sou liy 4 liy lan si [$ 1 = "tout"] || [$ 1 = "deskripsyon"] | [$ 1 = "tit"] chèk si wi ou non paramèt 1ye egal ak "tout" oswa "deskripsyon" oswa "tit".

Koulye a, si itilizatè a kouri sh rssget.sh pòmdetè fwomaj pa gen anyen ki te retounen tandiske yo anvan yo ta resevwa yon lis tit soti nan LXER.

Opoze a nan | | se &&. Operatè a && kanpe pou AK.

Mwen pral fè script la gade menm plis tankou yon kochma men li fè tout chèk enpòtan a asire ke itilizatè a te bay 2 paramèt.

#! / bin / bash

si [$ # -eq 2]
lè sa a

si [$ 2 = "aboutdotcom"] | [$ 2 = "lxer"]
lè sa a
si [$ 1 = "tout"] || [$ 1 = "deskripsyon"] | [$ 1 = "tit"]
lè sa a
si [$ 2 = "aboutdotcom"]
lè sa a

si [$ 1 = "tout"]
lè sa a
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskripsyon"]
lè sa a
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
lòt moun
si [$ 1 = "tout"]
lè sa a
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskripsyon"]
lè sa a
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
lòt moun
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Siy la sèlman ki se siplemantè nan ki script se yon lòt deklarasyon ekstèn IF jan sa a: si [$ # -eq 2] . Si ou li atik la sou paramèt opinyon ou pral konnen ke $ # retounen yon konte sou kantite paramèt opinyon. -eq a kanpe pou egal. Deklarasyon an SI Se poutèt sa, chèk ki itilizatè a te antre nan 2 paramèt ak si yo pa t 'li jis sòti san yo pa fè anyen. (Pa patikilyèman zanmitay).

Mwen konnen ke didacticiel sa a ap vin byen gwo. Pa gen anpil ankò pou kouvri semèn sa a, men mwen vle ede pwòp moute script la anvan nou fini.

Youn nan dènye lòd ke ou bezwen aprann sou deklarasyon kondisyonèl se deklarasyon CASE.

#! / bin / bash


si [$ # -eq 2]
lè sa a
ka $ 2 nan
aboutdotcom)
ka $ 1 pous
tout)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
deskripsyon)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
tit)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
ka $ 1 pous
tout)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
deskripsyon)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
tit)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Deklarasyon sa a se yon fason ki pi bon pou ou ekri si ELSE SI ELSE IF ELSE IF.

Pou egzanp sa a lojik

SI fwi = bannann
Lè sa a
ELSE SI Fwi = zoranj
Lè sa a
ELSE SI Fwi = rezen
Lè sa a
LI END

ka ekri tankou:

ka fwi nan
bannann)
fè sa
;;
zoranj)
fè sa
;;
rezen)
fè sa
;;
esac

Fondamantalman atik la premye apre ka a se bagay ou pral konpare (sa vle di fwi). Lè sa a, chak atik anvan parantèz yo se bagay ou konpare kont ak si li matche liy ki anvan yo; yo pral kouri. Yon deklarasyon ka sispann ak esak nan ranvèse (ki se ka bak).

Nan rssget.sh script la ka deklarasyon an ka retire kèk nan ki terib nidifikasyon byenke pa reyèlman amelyore li ase.

Pou reyèlman amelyore script la mwen bezwen prezante ou nan varyab.

Gade kòd sa a:

#! / bin / bash

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

si [$ # -lt 2] || [$ # -gay 2]
lè sa a
Eko "itilizasyon: rssget.sh [tout | deskripsyon | tit] [aboutdotcom | lxer]";
sòti;
fi

ka $ 1 pous
tout)
ekspozisyon = "- d -l -u"
;;
deskripsyon)
ekspozisyon = "- d -u"
;;
tit)
ekspozisyon = "- u"
;;
esac

ka $ 2 nan
aboutdotcom)
url = $ overdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ ekspozisyon $ url;

Yon varyab defini nan bay li yon non ak Lè sa a, plase yon valè nan li. Nan egzanp ki anwo a, bagay sa yo se varyab devwa:

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

Script la se imedyatman plis dosil lè l sèvi avèk varyab. Pou egzanp chak paramèt okipe separeman epi kidonk pa gen okenn enbrike deklarasyon SI.

Se varyab la ekspozisyon kounye a mete depann sou si ou te chwazi tout, deskripsyon oswa tit ak varyab URL la mete nan valè a nan varyab a soudotcom oswa valè a nan varyab la lxer depann si ou te chwazi aboutdotcom oswa lxer.

Kòmandman an rsstail kounye a jis gen yo sèvi ak valè a nan ekspozisyon ak URL nan kouri kòrèkteman.

Tou varyab yo mete jis pa bay yo yon non, aktyèlman sèvi ak yo ou gen yo mete yon siy $ devan yo. Nan lòt mo varyab = valè kouche varyab nan yon valè Lè nou konsidere ke $ varyab vle di m 'sa ki nan varyab la.

Sa ki anba la a se script la final pou Tutorial sa a.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
soudotcom = "z.about.com/6/o/m/linux_p2.xml"
chakdaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
itilizasyon = "itilizasyon: rssget.sh [tout | deskripsyon | tit] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
ekspozisyon = ""
url = ""

si [$ # -lt 2] || [$ # -gay 2]
lè sa a
eko $ itilizasyon;
sòti;
fi

ka $ 1 pous
tout)
ekspozisyon = "- d -l -u"
;;
deskripsyon)
ekspozisyon = "- d -u"
;;
tit)
ekspozisyon = "- u"
;;
*)
eko $ itilizasyon;
sòti;
;;
esac

ka $ 2 nan
aboutdotcom)
url = $ overdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
chakdaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
eko $ itilizasyon;
sòti;
esac

rsstail $ ekspozisyon $ url;

Sipleman an pi wo a entwodui plis RSS Feeds e gen yon varyab l 'ki di itilizatè a ki jan yo sèvi ak script la si yo swa pa antre nan 2 varyab oswa yo antre nan opsyon kòrèk pou varyab yo.

Rezime

Sa a te yon atik sezon e yo te ale twò lwen twò bonè. Nan gid kap vini an mwen pral montre w tout opsyon konparezon yo pou IF deklarasyon yo e toujou gen anpil plis pale sou ak konsidere varyab.

Genyen tou plis ki ka fè amelyore script ki anwo la a ak sa a yo pral kouvri nan gid nan lavni jan nou eksplore pasan, grep ak ekspresyon regilye.

Tcheke Kijan Pou (desann sot pase kategori yo wè yon lis atik) seksyon nan l inux.about.com jwenn gid plis itil soti nan doub démarrage Windows ak Ubuntu mete kanpe yon machin vityèl lè l sèvi avèk bwat GNOME .