Beginners Guide Zu BASH - Conditiounen a Variablen

Aféierung

Wëllkomm op den drëtten Deel vum "Beginners Guide To BASH". Wann Dir déi zwee virdrun zwee Artikelen vermësst hutt, da wahrscheinlech och wësse wat de Guide elo an aner BASH Scripting Guides ënnerschreift.

Dëse Guide gëtt vun engem kompletten Start an BASH geschriwwe a sou wéi e Lieser Dir léiert wéi ech léieren. Obwuel ech e Startdokum zu BASH sinn ech aus engem Softwareentwécklungshinter kommen, obwuel de gréissten Deel vun der Saach, déi ech geschriwwen huet, fir d'Windows Plattform gewiescht wier.

Dir kënnt déi éischt zwou Guides besichen:

Wann Dir nei BASH-Skripte sidd, recommandéiert ech déi éischt zwou Guiden ze liesen éier dëst matgeet.

An dësem Guide wäert ech opmaachen, wéi Dir bedingste Erklärungen benotzt fir Benotzerindeeg ze testen an ze kontrolléieren wéi e Skript funktionéiert.

Installatioun vu rsstail installéieren

Fir dës Guidueur ze verfollegen brauch Dir eng Kommandozeileng Applikatioun ze benotzen déi rsstail genannt gëtt, déi benotzt RSS-Feeds liesen .

Wann Dir eng Debian / Ubuntu / Mint baséiert Verdeelungstyp benotzt:

sudo apt-get install rsstail

Fir Fedora / CentOS etc type:

Yum installéiert rsstail

Fir openSUSE fuert déi folgend:

Zypper installéiert rsstail

D'IF - Ausso

Öffnen en Termin an erstellen eng Datei déi rssget.sh genannt gëtt, andeems Dir déi folgend steet:

sudo nano rssget.sh

Am Nano-Editor gitt am Text:

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

Späicheren der Datei duerch Dréckt CTRL a O an duerno Auslaascht duerch Dréckt CTRL a X.

Fuerder de Skript duerch de typeschen Text:

sh rssget.sh

De Skript verëffentlecht eng Lëscht vun Titelen aus dem RSS RSS feed linux.about.com.

Et ass net en iwwer nëtzlech Skript, well et just d'Titelen aus engem RSS-Feed abréngen, awer et späichert datt de Wee op den Linux.about.com RSS feed erënnert.

Öffnen Sie den rssget.sh-Skript an der Nano erof an d'Datei z'änneren an ze änneren:

#! / bin / Bash

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

Fuerderen d'Skript nees erof:

sh rssget.sh verbose

Dës Kéier ass de RSS-Feed mat dem Titel, Link an Beschreiwung zréckkomm.

Loosse mer d'Skript an e puer Detailer analyséieren:

De #! / Bin / bash ass an all Skript, wou mir schreiwen. Déi nächst Zeil gesäit am Prinzip kuckt den éischten Parameteren vum Input deen de Benotzer ugebueden huet a vergläicht et mat dem Wuert "verbose". Wann de Parameter vum input an d'Wuert "verbose" mat den Zeilen tëschent deem a fi fiert .

Dee virdrun Skript ass natierlech offensichtlech. Wat geschitt wann Dir kee Parametereingriff huet? D'Äntwert ass een e Feeler laanscht d'Zeilen vun onerwaarten Operatioun.

De gréissten Defekt ass datt wann Dir kee Wuert "verbose" bitt, dann ass näischt geschitt. Ideal wann Dir de Wuert net verbidden, da gët d'Skript eng Lëscht vun Titelen zréck.

Benotzt nano erneinen fir d'rssget.sh Datei ze änneren an de Code wéi folgend ze änneren:

#! / bin / Bash

Wann [[$ 1 = "verbose"]
dann
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
aneren
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Fi

Dëss Datei späicheren a féieren, andeems Dir déi folgend steet:

sh rssget.sh verbose

Eng Lëscht vun Titelen, Beschreiwungen an Links gëtt gewisen. Fannt elo erëm wéi folgend:

sh rssget.sh Titelen

Dës Kéier ass nëmmen eng Lëscht vun Titelen ze gesinn.

Den Extrait vum Skript ass op der Linn 4 a féiert d' aner Erklärung. Am Prinzip gesäit d'Skript elo aus, wann den éischte Parameter dat Wuert "verbose" ass, d'Beschreiwung, Links an Titel fir den RSS-Feed kréien, awer wann den éischte Parameter alles anescht nëmmen eng Lëscht vun Titelen kréien.

De Skript huet liicht verbessert, awer nach ëmmer gefeiert. Wann Dir net e Parameter gitt, kritt Dir ëmmer e Feeler. Och wann Dir e Parameter bitt, just andeems Dir seet, datt net verbose bedeit net heescht datt Dir nëmmen Titel huet. Dir hutt vläicht juste verbose verbose falsch geschwat oder Dir hutt typesch Taipene benotzt, déi natierlech Sënn sinn.

Virun eis et ze probéieren an dës Froen ze klären, wënschen ech Iech nach e puer Kommando, déi mat der IF-Erklärung geet.

Gitt är rssget.sh Schrëft, fir ze kucken:

#! / bin / Bash

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

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

Ech hu beschloss, de Begrëff läschen verbose an ersetzt et mat all. Dat ass net de wichtege Bestanddeel. De Skript uewendriwwert Elif deen e klengen Wee wier fir ELSE WANN ze soen.

Elo funktionéiert d'Skript wéi folgend. Wann Dir all rssget.sh hellt, da kritt Dir Beschreiwunge, Linken a Titel. Wann Dir awer nëmmen eng sh rssget.sh beschreiwt, kritt Dir just Titel a Beschreiwungen. Wann Dir en anere Wuert leet, kritt Dir eng Lëscht vun Titelen.

Dëst féiert e Wee fir séier mat enger Lëscht vu bedinghaften Aussoen ze kommen. Eng alternativ Manéier fir d'ELIF ze benotzen ass wat ugesinn ass wéi energesch IF.

Déi folgend ass e Beispill wat weist wéi geschachtte IF Aussoen Aarbecht:

#! / bin / Bash

Wann [$ 2 = "ondotcom"]
dann
Wann [$ 1 = "all"]
dann
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "Beschreiwung"]
dann
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

aneren
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Fi
aneren
Wann [$ 1 = "all"]
dann
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "Beschreiwung"]
dann
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
aneren
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Fi
Fi

Wëllt Dir alles drun erënneren, wann Dir wëllt oder kopéieren an e Fënster an Är rssget.sh Datei fënten.

Dee virdrun Skript entwéckert en zweet Parameter, deen Iech entweder "about.com" oder "lxer.com" en RSS-Feed entscheeden.

Fir et auszeféieren kënnt Dir ufänken:

sh rssget.sh all aboutdotcom

oder

rssget.sh all lxer

Dir kënnt natierlech all Beschreiwungen oder Titelen ersetzen fir nëmmen Beschreiwungen oder just Titel ze kréien.

Am Prinzip heescht de Code hei ob den zweeten Parameter ondotcom dann kuckt op déi zweet wann déi Ausso dat selwecht ass vum fréiere script ass, wann den zweeten Parameter lxer ass, dann kuckt d'Inder wann nach eng Kéier Erklärung ze huelen fir ob Titelen, Beschreiwunge ze weisen oder alles.

Dat Skript gëtt als e Beispill vun enger verschachtelten IF-Anweisung zur Verfügung gestellt an et ginn esou vill Saache falsch mam deem Skript et géif e weidere Artikel ze huelen fir all se ze erklären. Den Haaptproblem ass datt et net skalierbar ass.

Stellt Iech vir Dir wëllt en anere RSS-Feed wéi all Daag Linux User oder Linux Heute addéieren? D'Skript wäerten enorm wieren a wann Dir décidéiert datt Dir d'innere IF-Aussoe geännert hätt, musst Dir et op verschidde Plaze veränneren.

Obwuel et eng Zäit an Plaz fir en net geplangten IF géing se ze späicheren. Et gëtt normalerweis e Wee fir de Code ze refactéieren fir datt Dir déi verschachtelten IF guer net braucht. Ech wäert dëst Thema an engem zukünftegt Artikel passen.

Loosst eis elo kucken, d'Thema vu Leit ze fixéieren Duff Parameteren. Zum Beispill am Skript ob den Benotzer an eppes wéi "ondotcom" als den 2. Parameter kënnt an dann eng Lëscht vun Artikelen aus dem RSS-Feed vun der LXER ët unerkannt sinn wéi wann de Benotzer lseren oder net.

Zousätzlech wann de Benotzer net "all" oder "Beschreiwung" als den 1. Parameter kënnt an déi Standard ass eng Lëscht vun Titelen déi ofgefouert sinn oder net wat de Benotzer beabsichtigt huet.

Kuckt Iech op de folgend Skript (oder kopéieren an fügen se op Äre rssget.sh Datei.

#! / bin / Bash

Wann [$ 2 = "ondotcom"] || [$ 2 = "lxer"]
dann
Wann [$ 1 = "all"] || [$ 1 = "Beschreiwung"] || [$ 1 = "Säit"]
dann
Wann [$ 2 = "ondotcom"]
dann

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

aneren
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Fi
aneren
Wann [$ 1 = "all"]
dann
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "Beschreiwung"]
dann
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
aneren
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Fi
Fi
Fi
Fi

Déi éischt Saach ze beuecken ass datt d'Skript elo elo zimlech grouss ass an Dir kënnt séier gesinn, wéi aus kontrolléierter Ënnersichung IF Aussoen kann ginn.

D'Schlëssel, déi an dësem Skript wichteg ass, ass d'IF-Ausso || Ausso DÉI Sektioun 2 a Linnen 4.

Den || steet fir OR. Also d'Linn wann [$ 2 = "ondotcom"] || [$ 2 = "lxer"] kontrolléiert ob de 2. Parameter mat "ondotcom" oder "lxer" ass. Wann et net geet, dann ass d'IF-Ausso fäerdeg, well et keng aner Ausso fir déi äusserst IF ass.

Ähnlech wéi d'Linn 4 d'Linn wann [$ 1 = "all"] || [$ 1 = "Beschreiwung"] || [$ 1 = "Titel"] kontrolléiert ob den 1. Parameter egal ass "all" oder "description" oder "title".

Elo wann de Benotzer rssget.sh Kartoffel Käse gëtt, gëtt näischt geännert, obwuel si eng Lëscht vun Titelen aus LXER kréien kréien.

D'Géigendeel vun || ass &&. Den && Betreiber steet fir AND.

Ech wäert de Skript méi nach méi wéi engem Albtraum kucken, awer et maacht déi all wichteg Kontroll fir sécher ze stellen, datt de Benotzer 2 Parameteren huet.

#! / bin / Bash

Wann [$ # -eq 2]
dann

Wann [$ 2 = "ondotcom"] || [$ 2 = "lxer"]
dann
Wann [$ 1 = "all"] || [$ 1 = "Beschreiwung"] || [$ 1 = "Säit"]
dann
Wann [$ 2 = "ondotcom"]
dann

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

aneren
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Fi
aneren
Wann [$ 1 = "all"]
dann
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "Beschreiwung"]
dann
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
aneren
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
Fi
Fi
Fi
Fi
Fi

Dat eenzegt Bit, dat extra ass an deem Skript ass eng aner äussert IF-Ausso wéi folgend: wann [$ # -eq 2] . Wann Dir den Artikel iwwer Inputparameter liest, musst Dir wëssen datt $ # e Zuel vun der Zuel vun de Parameteren gëtt. De -eq steet fir d'selwecht. D'IF-Ausso kontrolléiert dofir datt de Benotzer 2 Parameter nogeet an wann se net just gemaach hunn, ouni eppes ze maachen. (Net besonnesch Frëndschaft).

Ech sinn bewosst datt dës Tutorial ganz gutt ass. Et ass net vill méi fir dës Woch ze maachen, awer ech wëll d'Schrëft nëtzlech maache fir e Schluss ze maachen.

Déi lescht Kommandatioun déi Dir braucht fir iwwer bedinglech Aussoen ze léieren ass d'CASE Ausso.

#! / bin / Bash


Wann [$ # -eq 2]
dann
Fall $ 2
ondotcom)
Fall $ 1
all)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
Beschreiwung)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
Titel)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
Fall $ 1
all)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
Beschreiwung)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
Titel)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
Fi

D'Case Anweisung ass e bessere Wee fir ze schreiwen WANN ELSE IF ELSE IF ELSE IF.

Zum Beispill dës Logik

IF Fruucht = Bananen
DANN HEI
ELSE IF Fruucht = Orangen
DANN HEI
ELSE IF Fruucht = Trapp
DANN HEI
END IF

ka geschriwwe ginn wéi

Case Uebst
Bananen)
maachen
;;
Orangen)
maachen
;;
Trap)
maachen
;;
esac

Prinzipiell ass de éischten Element no dësem Fall d'Saach déi Dir vergläicht (dh Fruucht) ze vergläichen. Da ginn all Element virun de Klammeren d'Saach, déi Dir vergläicht, a wann et mat de Linnë passt; gëtt gelang. Eng Case-Ausso ass ofgeschloss mat dem Reverse-Esac (deen am Fall geet).

An dem rssget.sh Skript erënnert d'Case-Statement e puer vun deem schrecklecht Nestléit, obwuel se net wierklech genuch verbesseren.

Fir de Script ze verbesseren, muss ech Iech mat Variablen virstellen.

Kuckt de folgenden Code:

#! / bin / Bash

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

Wann [$ # -lt 2] || [$ # -gt 2]
dann
Echo "Usage: rssget.sh [all | beschreiwt | Titel] [aboutdotcom | lxer]";
Ausfahrt;
Fi

Fall $ 1
all)
Display = "- d -l -u"
;;
Beschreiwung)
Display = "- d -u"
;;
Titel)
Display = "- u"
;;
esac

Fall $ 2
ondotcom)
url = $ ondotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ affichéiert url;

Eng Variabel ass definéiert ginn andeems en e Numm gëtt an duerno e Wäert zwëschen. Am obewege Beispill sinn déi folgend Variabelen ze weisen:

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

De Skript ass direkt méi üblech iwwer Variablen. Zum Beispill gëtt de Parameteren separat behandelt an sou datt et keen Ausnam IF gesagt gëtt.

D'Virbereedung ass elo abhängig wann Dir all, Beschreiwung oder Titel gewielt hutt an d'Variable url gëtt op den Wert vun der ondotcom variabel oder de value vun der lxer variabel jee no, ob Dir um ondotcom oder lxer gewielt hutt.

De Kommando rsstail muss elo just de Wäert vum Display an url benotze fir richteg ze lafen.

Während Variabelen opgespaart sinn, wann se en Numm genannt ginn, fir se effektiv ze benotzen, musst Dir e $ Zeeche virun hinnen setzen. An anere Wierder Variablen = Wäerter sinn variabel op e Wäert, während $ variabel bedeit mir déi Inhalter vun der Variabel.

Déi folgend ass déi lescht Skript fir dësen Tutorial.

#! / bin / Bash

lxer = "lxer.com/module/newswire/headlines.rss"
ondotcom = "z.about.com/6/o/m/linux_p2.xml"
alldaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
D'Ausbezuelung vun der Wëssenschaft a vun der Wichtegkeet vun der Wëssenschaft.
Display = ""
url = ""

Wann [$ # -lt 2] || [$ # -gt 2]
dann
Echo $ Verbrauch;
Ausfahrt;
Fi

Fall $ 1
all)
Display = "- d -l -u"
;;
Beschreiwung)
Display = "- d -u"
;;
Titel)
Display = "- u"
;;
*)
Echo $ Verbrauch;
Ausfahrt;
;;
esac

Fall $ 2
ondotcom)
url = $ ondotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
alldaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
Echo $ Verbrauch;
Ausfahrt;
esac

rsstail $ affichéiert url;

Dee virdrun Skript entwéckelt méi RSS-Feeds an et ass eng Utility Variabel déi de Benotzer erzielt wéi d'Skript benotze kënnt wann se entweder 2 Variablen ufänken oder keng falsch Méiglechkeeten eraussichen fir déi Variablen.

Summary

Dëst ass e episch Artikel an ass méiglecherweis ze vill ze bannen. Am nächste Guide wäert ech all d 'Vergleichsoptiounen fir d'IF Aussoen weisen an et ass nach vill méi ze schwätzen iwwer Viraussetzungen.

Et ass och méi dat et fäerdeg bruecht ginn ass fir dat eegene Skript besser ze verbesseren an dëst gëtt an zukünftege Guiden abegraff wéi mir Loops, Grep a reguleg Ausdrécke erfëllt.

Kuckt de How To (kuckt an d'Kategorien kucke fir eng Lëscht vun Artikelen ze gesinn) Rubrik vun l inux.about.com fir méi nëtzlech Guiden ze fannen aus dualen Windows ze starten an Ubuntu fir e virtuelle Maschinn ze benotzen mat GNOME Këschten .