Gwida għall-Bidu għal BASH - Kondizzjonijiet u Varjabbli

Introduzzjoni

Merħba għat-tielet parti tal- "Gwida għall-Bidu għal BASH". Jekk tlift iż-żewġ artikoli ta 'qabel, probabilment trid tkun taf x'jagħmel din il-gwida differenti għal gwidi tal-kitba BASH oħra.

Din il-gwida qed tiġi miktuba minn novizzi kompleta għal BASH u għalhekk bħala qarrej titgħallem kif jitgħallmu. Filwaqt li jiena novizzi fir-rigward ta 'BASH, jiena ġejja minn sfond ta' żvilupp tas-softwer għalkemm ħafna mill-affarijiet li kitbu kien għall-pjattaforma tal-Windows.

Tista 'tara l-ewwel żewġ gwidi billi żżur:

Jekk int ġdid BASH scripting nirrakkomanda li taqra l-ewwel żewġ gwidi qabel ma tkompli ma 'dan.

F'din il-gwida se nispjega kif tuża dikjarazzjonijiet kondizzjonali biex tittestja l-input ta 'l-utent u biex tikkontrolla kif taħdem il-kitba.

Installa rsstail

Sabiex issegwi din il-gwida ser ikollok bżonn tinstalla applikazzjoni tal-linja tal-kmand imsejħa rsstail li tintuża biex taqra RSS feeds .

Jekk qed tuża tip ta 'distribuzzjoni bbażat fuq Debian / Ubuntu / Mint dan li ġej:

sudo apt-get install rsstail

Għal Fedora / CentOS eċċ it-tip li ġej:

yum install rsstail

Għat-tip openSUSE dan li ġej:

zypper jinstalla rsstail

Id-dikjarazzjoni IF

Iftaħ terminal u toħloq fajl imsejjaħ rssget.sh billi tippjana dan li ġej:

sudo nano rssget.sh

Fi ħdan l-editur nano daħħal it-test li ġej:

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

Ħlief il-fajl billi tagħfas CTRL u O u mbagħad ħruġ billi tagħfas CTRL u X.

Mexxi l-iskript billi ttajpja dan li ġej:

sh rssget.sh

L-iskritt jirritorna lista ta 'titoli mill-linux.about.com RSS feed.

Mhuwiex skrittur żejjed utli għaliex jirkupra biss it-titli minn RSS feed wieħed iżda ma jfissirx li għandu jiftakar it-triq għall-Linux.about.com RSS feed.

Iftaħ l-iskrittura rssget.sh f'nano għal darb'oħra u editja l-fajl biex tħares kif ġej:

#! / bin / bash

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

Mexxi l-iskript mill-ġdid billi jtajpja dan li ġej:

sh rssget.sh verbose

Din id-darba l-RSS feed jiġi lura bit-titlu, il-link u d-deskrizzjoni.

Ejjew nanalizzaw l-iskritt f'xi ftit dettall:

Il-bin! / Bin / bash jidher f'kull kitba li aħna tikteb. Il-linja li jmiss bażikament tħares lejn l-ewwel parametru tad-dħul provdut mill-utent u tqabbel mal-kelma "verbose". Jekk il-parametru tad-dħul u l-kelma "verbose" jaqblu mal-linji bejn dakinhar u l- fi huma tmexxa.

L-iskritt ta 'hawn fuq huwa ovvjament difettuż. X'jiġri jekk ma tagħtix parametru ta 'input? It-tweġiba hija li jkollok żball fuq il-linji ta 'operatur mhux mistenni.

Id-difett prinċipali l-ieħor huwa li jekk ma tipprovdix il-kelma "verbose" allura xejn ma jiġri xejn. Idealment, jekk ma tipprovdix il-kelma verbosa, l-iskritt jirritorna lista tat-titoli.

Uża nano għal darb'oħra biex tbiddel il-fajl rssget.sh u temenda l-kodiċi kif ġej:

#! / bin / bash

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

Ħlief il-fajl u ġġedilha billi ttajpja dan li ġej:

sh rssget.sh verbose

Tidher lista ta 'titli, deskrizzjonijiet u links. Now run mill-ġdid kif ġej:

sh rssget.sh titoli

Din id-darba jidher biss lista ta 'titoli.

Il-parti żejda tal-iskrittura tinsab fuq il-linja 4 u tintroduċi d-dikjarazzjoni inkella . Bażikament l-iskrittura issa jgħid jekk l-ewwel parametru hu l-kelma "verbose" niżżel id-deskrizzjoni, links u titoli għall-RSS feed imma jekk l-ewwel parametru huwa xi ħaġa oħra, ħu biss lista tat-titoli.

L-iskript tjieb xi ftit imma għadu difettuż. Jekk tonqos milli tidħol parametru int xorta se tikseb żball. Anke jekk inti tipprovdi parametru, sempliċement billi tgħid li ma tridx verbali ma jfissirx li trid titoli biss. Jista 'jkollok biss spjegat ħażin ħażin per eżempju jew jista' jkollok ħamiem ittajpjat li żgur bla sens.

Qabel ma nippruvaw niċċaraw dawn il-kwistjonijiet nixtieq nuruk kmand wieħed ieħor li jmur mad-dikjarazzjoni IF.

Edit l-iskrittura rssget.sh tiegħek biex tfittex kif ġej:

#! / bin / bash

jekk [$ 1 = "kollha"]
allura
rsstail -d-l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskrizzjoni"]
allura
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Iddeċidejt li teħles mill-kelma verbosa u ssostitwietha ma 'kulħadd. Dik mhix il-parti importanti. L-iskritt hawn fuq jintroduċi elif li huwa mod qasir ta 'tgħid ELSE IF.

Issa l-iskrittura taħdem kif ġej. Jekk inti tmexxi sh rssget.sh kollha mbagħad ikollok deskrizzjonijiet, links u titoli. Jekk minflok inti sempliċiment tesegwixxi rssget.sh sh deskrizzjoni int se tikseb biss titoli u deskrizzjonijiet. Jekk tforni kwalunkwe kelma oħra, ikollok lista ta 'titoli.

Dan jintroduċi mod kif toħroġ malajr lista ta 'dikjarazzjonijiet kondizzjonali. Mod alternattiv ta 'kif isir l-ELIF huwa li tuża dak li hu magħruf bħala dikjarazzjonijiet IF imdeffati.

Dan li ġej huwa eżempju li juri kif id-dikjarazzjonijiet IF imdejqa jaħdmu:

#! / bin / bash

jekk [$ 2 = "aboutdotcom"]
allura
jekk [$ 1 = "kollha"]
allura
rsstail -d-l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskrizzjoni"]
allura
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

inkella
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
inkella
jekk [$ 1 = "kollha"]
allura
rsstail -d-l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskrizzjoni"]
allura
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
inkella
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Ħossok liberu li ttajpja dak kollu li jixtieq jew kopja u paste fil-fajl rssget.sh tiegħek.

L-iskritt ta 'hawn fuq jintroduċi parametru 2 li jagħtik li tagħżel "madwar.com" jew "lxer.com" ta' RSS feed.

Biex titmexxa int ittajpja dan li ġej:

sh rssget.sh kollha aboutdotcom

jew

sh rssget.sh kollha lxer

Tista 'naturalment tissostitwixxi dawk kollha b'deskrizzjonijiet jew titoli biex jipprovdu biss deskrizzjonijiet jew titoli biss.

Bażikament il-kodiċi ta 'hawn fuq jgħid jekk it-tieni parametru huwiex dwardotcom imbagħad ħares lejn it-tieni jekk dikjarazzjoni li hija l-istess waħda mill-kitba ta' qabel inkella jekk it-tieni parametru huwa aktar lili u mbagħad tħares lejn id-dikjarazzjoni ta 'ġewwa għal darb'oħra biex tiddeċiedi jekk turix titli, deskrizzjonijiet jew kollox.

Dak l-iskrittura huwa pprovdut purament bħala eżempju ta 'dikjarazzjoni IF imqabbda u hemm ħafna affarijiet ħażin ma' dik l-iskrittura li tieħu artikolu ieħor biex tispjegahom kollha. Il-kwistjoni ewlenija hija li mhix skalabbli.

Immaġina li ridt żid RSS feed ieħor bħal Everyday Linux User jew Linux Today? L-iskript isir enormi u jekk iddeċidejt li riedu li d-dikjarazzjoni IF interna tinbidel, ikollok tibdelha f'postijiet multipli.

Filwaqt li hemm ħin u post għal IF imqabbad, dawn għandhom jintużaw b'mod moderat. Normalment ikun hemm mod biex jirranġa l-kodiċi tiegħek sabiex ma jkollokx bżonn l-IF imqabbad. Jien se ngħaddi għal dan is-suġġett f'artikolu futur.

Ejja nħarsu lejn l-iffissar tal-kwistjoni tan-nies li jidħlu fil-parametri duff. Per eżempju fl-iskritt hawn fuq jekk l-utent jidħol f'xi ħaġa oħra għajr "aboutdotcom" bħala t-tieni parametru allura lista ta 'artikli tidher mill-RSS feed minn LXER irrispettivament minn jekk l-utent jidħolx lejżer jew le.

Barra minn hekk, jekk l-utent ma jidħolx "kollha" jew "deskrizzjoni" bħala l-ewwel parametru allura l-inadempjenza hija lista ta 'titoli li jistgħu jew ma jkunux dak li l-utent kien maħsub.

Ħares lejn l-iskritt li ġej (jew kopja u paste fil-fajl rssget.sh tiegħek.

#! / bin / bash

jekk [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
allura
jekk [$ 1 = "kollha"] || [$ 1 = "deskrizzjoni"] || [$ 1 = "titolu"]
allura
jekk [$ 2 = "aboutdotcom"]
allura

jekk [$ 1 = "kollha"]
allura
rsstail -d-l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskrizzjoni"]
allura
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

inkella
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
inkella
jekk [$ 1 = "kollha"]
allura
rsstail -d-l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskrizzjoni"]
allura
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
inkella
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

L-ewwel ħaġa li wieħed jinnota hi li l-iskritt issa qed isir pjuttost kbir u tista 'malajr tara kif mill-istejjer tal-kontroll IF nested jistgħu jsiru.

Il-ftit li huwa importanti f'dan l-iskritt huwa d-dikjarazzjoni IF || dikjarazzjoni THEN it-taqsima fuq il-linja 2 u l-linja 4.

Il-|| stands għal OR. Allura l-linja jekk [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] jikkontrolla jekk it-tieni parametru huwiex "aboutdotcom" jew "lxer". Jekk ma jkunx hekk, id-dikjarazzjoni IF hija kompluta minħabba li m'hemm l-ebda dikjarazzjoni oħra għall-iktar IF estern .

Bl-istess mod fuq il-linja 4 il-linja jekk [$ 1 = "kollha"] || [$ 1 = "deskrizzjoni"] || [$ 1 = "titolu"] jikkontrolla jekk l-ewwel parametru huwiex daqs "kollha" jew "deskrizzjoni" jew "titolu".

Issa jekk l-utent iwettaq sh rssget.sh il-patata tal-ġobon mhija rritornata xejn, qabel ma kienu jirċievu lista ta 'titoli minn LXER.

L-oppost ta '|| hu &&. L-operatur & & stands għal AND.

Jiena nagħmel l-iskrittura nħarsu saħansitra aktar ħmarillejl iżda tagħmel il-kontroll importanti kollu biex tiżgura li l-utent ipprovda 2 parametri.

#! / bin / bash

jekk [$ # -eq 2]
allura

jekk [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
allura
jekk [$ 1 = "kollha"] || [$ 1 = "deskrizzjoni"] || [$ 1 = "titolu"]
allura
jekk [$ 2 = "aboutdotcom"]
allura

jekk [$ 1 = "kollha"]
allura
rsstail -d-l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "deskrizzjoni"]
allura
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

inkella
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
inkella
jekk [$ 1 = "kollha"]
allura
rsstail -d-l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "deskrizzjoni"]
allura
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
inkella
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

L-unika bit li hija żejda f'dik l-iskrittura hija dikjarazzjoni oħra ta 'barra IF kif ġej: jekk [$ # -eq 2] . Jekk taqra l-artiklu dwar il-parametri tal-input inti taf li $ # jirritorna għadd tan-numru ta 'parametri ta' input. Il-qaddej huwa ugwali. Id-dikjarazzjoni IF għalhekk jiċċekkja li l-utent daħħal 2 parametri u jekk ma kienx biss joħroġ mingħajr ma jagħmel xejn. (Mhux partikolarment faċli).

Jiena konxju li dan it-tutorja qed isir pjuttost kbir. M'hemmx ħafna aktar biex ikopru din il-ġimgħa iżda nixtieq ngħin biex nindunaw l-iskrittura qabel ma nispiċċaw.

L-aħħar kmand li għandek bżonn titgħallem dwar dikjarazzjonijiet kondizzjonali hija d-dikjarazzjoni CASE.

#! / bin / bash


jekk [$ # -eq 2]
allura
każ $ 2 fi
aboutdotcom)
każ $ 1 fi
kollha)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
deskrizzjoni)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
titolu)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
każ $ 1 fi
kollha)
rsstail -d-l -u http://lxer.com/module/newswire/headlines.rss
;;
deskrizzjoni)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
titolu)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Id-dikjarazzjoni tal-każ hija mod aħjar ta 'kitba JEKK ELSE JEKK ELSE JEKK IF OĦRA JEKK.

Pereżempju din il-loġika

IF frott = banana
Imbagħad dan
ELSE JEKK frott = larinġ
Imbagħad dan
ELSE Jekk frott = għeneb
Imbagħad dan
END IF

tista 'terġa' tiġi miktuba bħala:

frott tal-każ fi
banana)
tagħmel dan
;;
larinġ)
tagħmel dan
;;
għeneb)
tagħmel dan
;;
esac

Bażikament l-ewwel oġġett wara l-każ huwa l-ħaġa li ser tqabbel (jiġifieri l-frott). Imbagħad kull oġġett qabel il-parentesi huwa l-ħaġa li qed tqabbel kontra u jekk taqbel mal-linji ta 'qabel; se titmexxa. Dikjarazzjoni tal-każ tintemm bl-esac invers (li huwa l-każ lura).

Fl-iskrittura rssget.sh id-dikjarazzjoni tal-każ tneħħi ftit minn dak it-tbejjit orribbli għalkemm mhux verament ittejjeb biżżejjed.

Biex verament ittejjeb l-iskrittura għandi bżonn nidħollek għall-fatturi varjabbli.

Ħares lejn il-kodiċi li ġej:

#! / bin / bash

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

jekk [$ # -lt 2] || [$ # -gt 2]
allura
eko "użu: rssget.sh [kollha | deskrizzjoni | titlu] [dwardotcom | lxer]";
ħruġ;
fi

każ $ 1 fi
kollha)
display = "- d -l -u"
;;
deskrizzjoni)
wiri = "- d -u"
;;
titolu)
wiri = "- u"
;;
esac

każ $ 2 fi
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

Varjabbli hija definita billi tingħatalha isem u mbagħad tassenja valur għaliha. Fl-eżempju ta 'hawn fuq dawn li ġejjin huma assenjazzjonijiet varjabbli:

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

L-iskritt huwa istantanjament aktar maniġġabbli billi jintużaw varjabbli. Pereżempju kull parametru huwa ttrattat separatament u għalhekk m'hemmx stqarrijiet IF nested.

Il-varjabbli tal-wiri issa huwa ssettjat skond jekk għażiltx kollha, deskrizzjoni jew titolu u l-varjabbli url huwa ssettjat għall-valur tal-varjabbli aboutdotcom jew il-valur tal-varjabbli lxer skont jekk għażiltx madwardotcom jew lxer.

Il-kmand tar-radju issa biss għandu juża l-valur tal-wiri u l-url biex imexxi sew.

Filwaqt li l-varjabbli huma stabbiliti biss billi jagħtuhom isem, biex fil-fatt jużawhom għandek tqiegħed $ sinjal quddiemhom. Fi kliem ieħor varjabbli = settijiet ta 'valuri varjabbli għal valur filwaqt li $ varjabbli tfisser ittieni l-kontenut tal-varjabbli.

Dan li ġej hu l-iskritt finali għal dan it-tutorial.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
dailylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
usage = "użu: rssget.sh [kollha | deskrizzjoni | titlu] [lxer | aboutdotcom | dailylinuxuser | linuxtoday]"
wiri = ""
url = ""

jekk [$ # -lt 2] || [$ # -gt 2]
allura
użu ta 'echo $;
ħruġ;
fi

każ $ 1 fi
kollha)
display = "- d -l -u"
;;
deskrizzjoni)
wiri = "- d -u"
;;
titolu)
wiri = "- u"
;;
*)
użu ta 'echo $;
ħruġ;
;;
esac

każ $ 2 fi
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
kuljum).
url = $ dailylinuxuser;
;;
*)
użu ta 'echo $;
ħruġ;
esac

rsstail $ display $ url;

L-iskritt ta 'hawn fuq jintroduċi aktar RSS u hemm varjabbli ta' użu li jgħid lill-utent kif tuża l-iskritt jekk huma jew ma jidħlux 2 varjabbli jew jidħlu għażliet żbaljati għall-varjabbli.

Sinteżi

Dan kien oġġett epiku u seta 'mar wisq kmieni wisq. Fil-gwida li jmiss ser nuri l-għażliet kollha ta 'paragun għal dikjarazzjonijiet IF u għad fadal ħafna aktar biex nitkellmu dwar il-varjabbli.

Hemm ukoll aktar li jista 'jsir biex itejjeb l-iskritt ta' hawn fuq u dan se jkun kopert fil-gwidi tal-ġejjieni hekk kif nesploraw loops, grep u espressjonijiet regolari.

Iċċekkja l-Kif Biex (Skrollja 'l isfel il-kategoriji biex tara lista ta' artikli) sezzjoni ta 'l inux.about.com biex issib gwidi aktar utli minn booting doppju Windows u Ubuntu biex twaqqaf magna virtwali billi tuża kaxex GNOME .