A guidate di principianti à BASH - Conditions and Variables

Introduzione

Benvenutu à a terza parte di "Guide Beginner à BASH". Sì avete abbandunatu l'articuli previsti dopu chì tù vulete sapè di ciò chì face sta guida diversa à l'altri guidati script script BASH.

Sta guidazione hè stata scritta da un novu à BASH è cusì un lettore hà amparate cumu apre. Mentre ch'ùn sò novu à BASH I sò vinutu da un sviluppu di sviluppu di u software, a più chì a maiò parte di i ghjetti chì aghju scrittu hè stata per a plataforma Windows.

Pudete vede i primi dui guidate dopu visitate:

Sè vo site novu à scrittura BASH recomendarà lighjerete e primi duie guidate prima di cuntinuà cù questu.

In questu guidate aghju stabilitu cumu utilizà stanzi cunnizionali per pruvà l'aiutu di l'utilizatori è per cuntrole ciò chì u funziunamentu script.

Installa rsstail

Per seguità sta guidanza, deverà stallà una applicazione di linea di cumanda chjamata rsstail chì ghjè utilizata per leghje i risorsi RSS .

Se utilizate un sistema di distribuzione basatu à Debian / Ubuntu / Mint :

sudo apt-get install rsstail

Per Fedora / CentOS etc. chjamate u seguente:

yum install rsstail

Per openSUSE chjamate u seguente:

zypper install rsstail

A manifestazione SI

Opere un terminal è crea un schedariu chjamatu rssget.sh aghjustendu i seguenti:

sudo nano rssget.sh

Dentru u nanu editore scrive u testu à seguente:

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

Scaricate u persunale aghjurnatu CTRL e O è da a salute presenne CTRL è X.

Executà u script scripturale chjamatu:

sh rssget.sh

U scrittu tornarà una lista di teneu di u linux.about.com RSS feed.

Ùn hè micca scrittura utili assai perchè solu ricive micca i tìtuli da una altezza RSS, ma salvu avè u ricordu di u percorsu à u Linux.about.com RSS feed.

Apertu l'script rssget.sh in nano novu è edità u schedariu per vede cusì:

#! / bin / bash

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

Scaricate l'script da pudendu scrive u seguente:

sh rssget.sh verbosu

Questu ora u RSS feed torna cù u titulu, u ligame è a descrizzione.

Analiteghjemu u script in un pocu di detail:

U #! / Bin / bash vene in ogni scrittore scrivemu. A stanza siguenti basca à u primu paràmetru di ingressione provduta da l'utilizatore è si compara à a parola "verbose". Se u paràmetru di ingressu è a parola "verbose" coincide cù e linii trà ed è dopu sò currutti.

U scrittore questu hè ovutamente flawed. Chì succète si ùn furnisce micca un paràmetru di ingressu? A risposta hè avè un'errore à u linu di u operatore imprevisu.

L'altru difettu maiò hè chì si ùn vi mancu furnisce a parola "verbose", nunda ùn hè succorsu in tuttu. Idealmentu sè ùn pudete furnisce micca a parolla furmata l'scriptu rende detta una lista di tituli.

Utilizà u nano novu per edità u schedariu rssget.sh è mudificà u còdulu cumu seguitu:

#! / bin / bash

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

Sfrancate u schedariu è fate ellu, aghjustendu i seguenti:

sh rssget.sh verbosu

A lista di tituli, descrizzioni è ligami saranu. Ora runu novu a seguita:

sh rssget.sh tituli

Questu ora hè una lista di tituli.

A parte extra di u script hè nantu à a linea 4 è presenta a strada di l' altru . Basta l'script hè oghji chì u primu paràmetru hè a parola "verbose" accetta a descrizzione, ligami è tituli per a feed RSS, ma se u primu paràmetru hè qualcosa à pocu solu avete una lista di tene.

L'script hè migliuratu ma ligne, ma hè sempre difettu. Se ùn falli di trasfurmà un paràmetru, avete ancu avè un errore. Ancu s'ellu ùn furnisce un paràmetru, solu per dì chì ùn vulete micca esse veramente ùn vole micca chì volenu esse tituli solu. Pudete avete esse scrittu verbose incorrecte per esempiu, o pudete avete pianu typate chì ghjè un sensu impurtante.

Prima di pruvà à esse chjamate questi quì, vogliu mustrà l'ammaestru un cumandamentu più chì si fa cun l'affirmazioni FI.

Edite u vostru script rssget.sh per vede cusì:

#! / bin / bash

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

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

Aghju decisatu di ridivà di a parola spustamenti è a sustituì cun tutti. Questu ùn hè micca a parte impurtante. U script di introduzione hè elif chì hè un modu cortu di dicen ELSE IF.

Avà u scrittore cum'è l'autore. Sè cundutu chè rssget.sh tutti l'avete scrittori, ligami è tituli. Sì in casu avete esse cumporciutu sh rssget.sh Discrizzione site ghjustu tuccari e descrizzioni. Se furnite una altra parola, riceverete una lista di tene.

Questu inserisce un modu di rapidamente chì vene cun una lista di stimi cunnizzionali. Una manera alternativa di fà ELIF hè di utilizà ciò chì si cunnosce cum'è Declarazione IF imbastita.

Questa siguenti hè un esempiu di mostra cumu funziunatu IF esistiti:

#! / bin / bash

se [$ 2 = "aboutdotcom"]
dopu
se [$ 1 = "all"]
dopu
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "description"]
dopu
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

altru
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
altru
se [$ 1 = "all"]
dopu
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
dopu
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
altru
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Fate liberate di tipu tutte ciò chì in u vostru piace o copre è piace à u vostru articulu rssget.sh.

U scrittu di u scrittore presenta un 2u paràmetru chì permette di sceglie chjamà "about.com" o "lxer.com" un sindicatu RSS.

Per run it type in the following:

sh rssget.sh tutte e questa

o

sh rssget.sh all lxer

Pudete puru cambiassi tutte e cundizzioni o tituli per fornitu solu scritture o sia tituli.

Basìticamente u codice di supra dice chì u second paràmetru hè aboutdotcom dopu à vede à u secondu se u dichjarazione chì hè u stessu da u script previ à l'altru se u sicondu paràmetru hè LXER da quì sottu à l'affirmazioni intellettuale à novu per decide si indicà tene, descripzioni o tuttu.

Hè scrittu hè provista puramente com'è un esempiu di una affirmazioni FI affilindata è ci sò parechje male sbagliate cù questu scrittoghju pigliau un altru articulu per spiegà tutti. A principal issue hè chì ùn hè micca scalibule.

Imagine chì vulete aghjunghje un altru alimentu RSS cum'è Linux di tutti l'usu di Linux o di Linux? U scrittoghju addiventà enormi è se decide chì vulete chì l'affirmazioni FI internu di cambià avete da esse cambiatu in parechje posti.

Mentre chì ci hè un tempu è un locu per un imbastu IF i devanu esse usatu sparingly. Ci hè un modu per refactorà u vostru còdice, perchè ùn avete bisognu à l'imbasta IF à tuttu. Vinaraghju nantu à stu sughjettu in un articulu futuru.

Avà avè cusì à riparazione di u prublemu di e persone chì intrenu duff parametri. Per esempiu in u scrittore quì sopra se l'utilizatori entra ind'u qualchì altru ch'è "aboutdotcom" com'è u 2 paràmetru, po in seguita una lista di articuli prisintanu da l'RSS feed da LXER regardless as to whether the user enter lxer o not.

Inoltre se l'utilizatore ùn mette "tutte" o "scrittura" cum'è u primu paràmetru, invece di manera predeterminada hè una lista di tituli chì pò esse o micca chì u usu l'usu.

Fighjate à l'script (o copie è appicca in u vostru articulu rssget.sh.

#! / bin / bash

se [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
dopu
se [$ 1 = "all"] || [$ 1 = "description"] || [$ 1 = "titulu"]
dopu
se [$ 2 = "aboutdotcom"]
dopu

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

altru
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
altru
se [$ 1 = "all"]
dopu
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
dopu
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
altru
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

U primu a nota hè chì l'script hè oghje sempre assai grande è pudete vede veloce da quella di u cuntrollu cuntrastatu i manifestazioni IF i diventate.

U pocu chì hè impurtante in questu script hè u manifestu FI || dichjarazione dopu a pagina 2 è a ligna 4.

The || significa Ogni. Allora a ligna si [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] verifica se u 2u parametru hè uguali di "aboutdotcom" o "lxer". Sì ùn hè micca cusì u manifestazione SI hè cumpletu perchè ùn ci hè micca altru cuntrastu per a maiò parte FI.

Cumu à a linea 4 a linea si [$ 1 = "all"] || [$ 1 = "description"] || [$ 1 = "titulu"] verifica se u 1u paràmetru hè uguali à qualchì "tutte" o "scrittura" o "titulu".

Avà si l'usu persone sh rssget.sh u patate chì u furmagliu ùn hè micca tornatu mentre chì prima avìanu ricivutu una lista di tene per LXER.

U cuntattu di || hè &&. U && operatore detta E AND.

Vogliu a fà u guidanu ancu più com'è un pesadore, ma faci ellu tutte a verra impurtante per verificà chì l'utilizatore hà datu 2 paràmetri.

#! / bin / bash

se [$ # -eq 2]
dopu

se [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
dopu
se [$ 1 = "all"] || [$ 1 = "description"] || [$ 1 = "titulu"]
dopu
se [$ 2 = "aboutdotcom"]
dopu

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

altru
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
altru
se [$ 1 = "all"]
dopu
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "description"]
dopu
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
altru
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

U solu bitu chì hè extra in questu scrittore hè un altru manifestu FI in fine è seguite: se [$ # -eq 2] . Se le l \ 'articulu di i paràmetri di ingressu, sapere chì $ # rende un cunti di u numaru di paràmetri di input. U-è cume ecculi. A manifestazione SI si compruisce chì l'utilizatore hà scrittu à 2 paràmetri, è s'elli ùn avianu micca escemente senza fà nunda. (Non particularmente simpaticu).

Sò cunzignatu chì u tutoriale hè assai abbastanza grande. Ùn ci hè più chjaru per coperta sta settimana ma aghju vulsutu aiutà à appruvà l'scriptu prima di finisce.

L'ultimu mandatu chì avete bisognu di sapè infurmazione cunnuscenziale hè a declarazione CASE.

#! / bin / bash


se [$ # -eq 2]
dopu
casu $ 2 in
cirratori)
casu $ 1 in
tutti)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
description)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
titulu)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
casu $ 1 in
tutti)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
description)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
titulu)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

L'affirmazioni di u casu hè un modu nicer di scritta SI ELSE IF ELSE IF ELSE IF.

Per esempiu stu lògicu

Si fruttu = banane
Eppuru questu
ELSE IF fruit = orange
Eppuru questu
ELSE IF fruit = uva
Eppuru questu
END IF

pò esse riabilitatu cum'è:

fruttu di casu in
bananas)
fà questu
;;
oranges)
fà questu
;;
uva)
fà questu
;;
esac

Basictamentu u primu articulu dopu à u casu hè a cosa chì vouschinu per paragunà (ie fruttu). Allora ogni articulu prima di i parcheghji hè a cosa chì si svilicate contra è si fate cù i linii previ; sarà corratu. Una declarazione di casu hè terminata da l'esacre inversa (chì hè casu à volta).

In u scrittore rssget.sh l'affirmazioni di u situ digià qualchissia parechje di questu anu nesting anchi si sappieghja micca assai megliurà.

Per fà veramente amparatu l'script, avè bisognu di presentà a variàbbili.

Fighjite à u codice seguente:

#! / bin / bash

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

se [$ # -lt 2] || [$ # -gt 2]
dopu
echo "utilizzatu: rssget.sh [tutti | descripzione | titulu] [aboutdotcom | lxer]";
surtite;
fi

casu $ 1 in
tutti)
indicà = "- d -l -u"
;;
description)
indicà = "- d -u"
;;
titulu)
indicà = "- u"
;;
esac

casu $ 2 in
cirratori)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

Una variable hè definita da aghjustà un nome è da assignà un valore à questu. In l'esempiu di supra, e seguenti sò miszii variàvule:

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

U scrittore hè istantaneamente più maniatili cù l'usu di variàbili. Per esempiu, ogni paràmetru hè tratatu solu per esempiu, ùn sò micca affirmate IF affiljati.

A variàbbilite di visualizazione hè issa stipulate secondu u chjode t'hà sceltu, scritta o un titulu, è a url variable hè stata a valuta di a variabilità aboutdotcom o u valore di a lgaria varieghja secondu esse chjamatu quoti o questa.

A cumanda rsstail hè a ghjusta à utilizà u valore di a visualizazione è a url per esse correttu.

E mentre variàbligatori sò settuli per dà un nome, per pudè usà l'articulu chjamate u $ signe davanti ad elli. In autri vocabuli variable = value set varietal à un valariu mentre $ variable significa dà u cuntenutu di a variàbile.

U seguente hè a scrittura finali di stu tutoriale.

#! / 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 = "usage: rssget.sh [all | description | title] [lxer | aboutdotcom | dailylinuxuser | linuxtoday]"
indicari = ""
url = ""

se [$ # -lt 2] || [$ # -gt 2]
dopu
echo $ usage;
surtite;
fi

casu $ 1 in
tutti)
indicà = "- d -l -u"
;;
description)
indicà = "- d -u"
;;
titulu)
indicà = "- u"
;;
*)
echo $ usage;
surtite;
;;
esac

casu $ 2 in
cirratori)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
cucurbitelluni)
url = $ dailylinuxuser;
;;
*)
echo $ usage;
surtite;
esac

rsstail $ display $ url;

U script di supra inserisci più fonti RSS è ci hè una variabilità d'utilizazione chì hà dettu à l'utilizatore cumu utilizà l'script, siddu o ùn entrà micca 2 variàbili o entrò un scuperte incorrecte per e variàbili.

Resumen

Questu hè statu un articulu èpericu è pò esse troppu troppu prestu. In a guida sussurna vi vi mustrarà tutte e scelte di compulione per i manifestazioni IF è ùn ferma più più di parlà cun per a variàbili.

Ci hè ancu più chì pò esse fattu per migliurà l'script scrittu è questu seranu cuprivate in guidenti futuri cum'è scoprei loops, grep e spressione regulare.

Scuprite u Cumu (scacciate i passendu i categurie per vede una lista di articuli) sezione di l inux.about.com per truvà più di guidate utili di u duplo boot Windows è Ubuntu per a creazione di una macchina virtuelna cù GNOME .