Beginners Guide nei BASH - Bedriuwen en fariabelen

Ynlieding

Wolkom op it tredde part fan it "Beginners Guide to BASH". As jo ​​de foarige twa artikels misse hawwe, dan sille jo wierskynlik witte wat dizze handige is oars as oare BASH-skriptguods.

Dizze guod wurdt skreaun troch in folsleine novice oan BASH en sa as in lêzer learst as ik leare. Wylst ik in novice oan BASH bin, komme ik fan in softwareûntwikkeling eftergrûn, hoewol it measte fan it stik dat ik skreaun is foar it Windows-platfoarm.

Jo kinne de earste beide riden sjen troch te besykjen:

As jo ​​nije binne nei BASH skript, ried ik de earste twa lieders oan te lêzen foardat dit oanbean wurdt.

Yn dit guod sil ik bepale hokker gebrûk fan betingsten te brûken foar testen fan brûkersynfier en om te kontrolearjen hoe't in skript funkt.

Rsstail ynstallearje

Om dit guod folgje te kinnen moatte jo in kommando-rigel-applikaasje ynstalleare dy't rsstail wurdt neamd dy't brûkt wurdt om RSS-feeds te lêzen.

As jo ​​in Debian / Ubuntu / Mint basearre ferspriedingsart brûke, dan kinne jo folgje:

sudo apt-get install rsstail

Foar Fedora / CentOS elke de folgjende type:

yum install rsstail

Foar openSUSE type de neikommende:

Zypper ynstallearje rsstail

De IF-oanfetting

Iepenje in terminal en meitsje in triem mei de namme rssget.sh troch te typen:

sudo nano rssget.sh

Binnen de nano-editor binne de folgjende tekst ynfiere:

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

Besparje it bestân troch CTRL en O te drukken en dan út te gean troch te drukken op CTRL en X.

It skript útfiere troch de folgjende te typen:

sh rssget.sh

It skript sil in list mei titels fan 'e linux.about.com RSS-feed.

It is net in oefenich brûkbere skript omdat it allinnich de titels fan ien RSS-feed weromfiert, mar it bewarje dat jo de paden nei it Linux.about.com-RSS-feed opnimme moatte.

Iepenje it rssget.sh skript yn nano wer en bewurkje it bestân om sa te sjen:

#! / bin / bash

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

Laad it skript wer troch de folgjende te typen:

sh rssget.sh verbose

Dit kear komt de RSS-feed werom mei de titel, keppeling en beskriuwing.

Lit it skript yn in bysûnder analysearje:

De #! / Bin / bash ferskynt yn elke skript dy't wy skriuwe. De folgjende line besjogge benammen op de earste ynfierparameter dy't de brûker trochjûn wurdt en fergelike mei it wurd "verbose". As de ynfierparameter en it wurd "verbose" oerienkomme mei de linen tusken dan en fi binne rûn.

It boppeste skript is fansels mislearre. Wat bart as jo gjin ynputparameter foarstelle? It antwurd jo krije in flater by de rigels fan ûnferwacht operator.

De oare grutte flaai is dat as jo it wurd "verbose" net leverje, dan komt der neat oer. Ideaal as jo it wurd net foarbiede, soene it skript in list mei titels weromjaan.

Brûk dan nochris de nano om de rssget.sh-bestân te bewurkjen en de koade as wizigje:

#! / bin / bash

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

Besparje it bestân en bewarje it troch de folgjende te typen:

sh rssget.sh verbose

In list mei titels, beskriuwingen en keppelingen sil ferskine. Rin it no opnij as folgjend:

sh rssget.sh titels

Dizze kear ferskynt allinich in list mei titels.

It ekstra diel fan it skript is op rigel 4 en bringt de oare deklaraasje yn. Basisynwurdt it skript no as de earste parameter it wurd "verbose" hat de beskriuwing, keppelings en titels foar it RSS-feed, mar as de earste parameter wat oars is in list fan titels.

It skript hat wat ferbettere, mar is noch flaw. As jo ​​in parameter ynfiere, sille jo noch in flater krije. Ek as jo in parameter leverje, allinich troch jo te sizzen dat jo net wolle dat verbose net betsjuttest dat jo allinich titels wolle. Jo kinne miskien krekt sprake foar ferkeard ferkeard of bygelyks guon soarten typen hawwe dy't fansels betsjuttingen is.

Foardat wy dizze problemen besykje en diele, wolle ik jo in oare kommando sjen litte dy't giet mei de IF-oanfetting.

Bewurkje jo rssget.sh skript om sa te sjen:

#! / bin / bash

as [$ 1 = "alles"]
dan
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "beskriuwing"]
dan
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

Ik beslute om it wurd ferwiderje te wêzen en it mei alle ferfangen. Dat is net it wichtichste diel. It skript hjirboppe introduces elif dy't in koart manier is om ELSE IF te sizzen.

No is it skript sa as folget. As jo alle rssget.sh allrinne, dan krije jo beskriuwingen, keppelings en titels. As jo oarspronklik skreare rssget.sh beskriuwing , sille jo gewoan titels en beskriuwingen krije. As jo ​​in oare wurd leverje krije jo in list mei titels.

Dit produsearret in manier om gau te kommen mei in list mei bedoelde ferklearrings. In alternatyf manier foar it dwaan fan ELIF is om te brûken wat bekind is as nested IF deklaraten.

De folgjende is in foarbyld fan 'e hoefolle analyses fan' e IF:

#! / bin / bash

as [$ 2 = "aboutdotcom"]
dan
as [$ 1 = "alles"]
dan
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "beskriuwing"]
dan
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

oars
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
oars
as [$ 1 = "alles"]
dan
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "beskriuwing"]
dan
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
oars
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Fiel jo frij om alles yn te typen as jo wolle of kopiearje en ynfoegje yn jo rssget.sh triem.

It boppeste skript foarmet in twadde parameter wêrby't jo "either.com" of "lxer.com" in RSS-feed kieze.

Om it út te fieren jo typearje yn 'e folgjende:

sh rssget.sh alle aboutdotcom

of

sh rssget.sh alle lxer

Jo kinne fansels allegearre mei beskriuwingen of titels ferfange om allinich beskriuwingen of just titels te jaan.

Yn haadsaak seit de koade hjirboppe as de twadde parameter is aboutdotcom sjoch dan op 'e twadde as in deklaraasje dy't itselde is fan' e foarige skripte oars as de twadde parameter lxer dan sjocht nei de ynder as asjebleaft wer ris besykje te sel of sjen of titels, beskriuwingen of alles.

Dat skript wurdt allinich as foarbyld foar in útsette IF-oanfetting skreaun en der binne safolle dingen ferkeard mei dat skript dat in oare artikel te nimmen om har te ferklearjen. It haadprobleem is dat it net skalberber is.

Stel dan dat jo in oare RSS-feed taheakje wolle lykas Everyday Linux User of Linux Today? It skript soe geweldig wurde en as jo besletten hawwe dat jo de ynterferinsje fan IF hawwe wizigje moatte jo dat op meardere plakken feroarje moatte.

Wylst der in tiid en plak foar in nestige IF binne, moatte se spareit brûkt wurde. Der is meastentiids in manier om jo koade te ferfetsjen sadat jo de ynstelde IF hielendal net nedich hawwe. Ik sil op dit ûnderwerp komme yn in takomst artikel.

Litte wy no sjogge op it befestigjen fan it probleem fan minsken dy't duff parameters ynkomme. Bygelyks yn it skript hjirboppe as de brûker in oar oars as "aboutdotcom" as de 2e parameter yntelt dan ferskynt in list fan artikels út it RSS-feed fan LXER ûnôfhinklik as de brûker yntreekt of net.

Fierder as de brûker gjin "allinich" of "beskriuwing" as de earste parameter ynfelt, dan is it standert in list mei titels dy't mooglik of net de brûker wêze kin.

Sjoch op it folgjende skript (of kopiearje en yn dizze rssget.sh triem ynfoegje).

#! / bin / bash

as [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
dan
as [$ 1 = "alles"] || [$ 1 = "beskriuwing"] || [$ 1 = "titel"]
dan
as [$ 2 = "aboutdotcom"]
dan

as [$ 1 = "alles"]
dan
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "beskriuwing"]
dan
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

oars
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
oars
as [$ 1 = "alles"]
dan
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "beskriuwing"]
dan
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
oars
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

It earste ding om te notearjen is dat it skript no gewoan grutte is en jo kinne fluch sjen hoe't der gjin kontrôle wurde kin fan IF fan stjoerrings.

It bit dat wichtich is yn dit skript is de IF-oantsjutting || ferklearje THEN seksje oer line 2 en line 4.

De || stiet foar OR. Dus de rigel as [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] kontrolearret of de twadde parameter is lyk oan "aboutdotcom" of "lxer". As it net is dan is de IF-oantsjutting kompleet omdat der gjin oare ferklearring is foar de bûtenste meast IF.

Lykas op rigel 4 de line as [$ 1 = "all"] || [$ 1 = "beskriuwing"] || [$ 1 = "titel"] kontrolearret oft de earste parameter lyk is oan "all" of "description" of "titel" is.

No as de brûker rssget.sh potatoes tsiis rint , wurdt neat weromjûn, wylst se foardat se in list mei titels fan LXER krigen hawwe.

It tsjinoerstelde fan || is && De && operateur stiet foar AND.

Ik sil it skript noch maker meitsje as in nachtmerje, mar it makket it alle wichtige kontrôle om te soargjen dat de brûker 2 parameters hat.

#! / bin / bash

as [$ # -eq 2]
dan

as [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
dan
as [$ 1 = "alles"] || [$ 1 = "beskriuwing"] || [$ 1 = "titel"]
dan
as [$ 2 = "aboutdotcom"]
dan

as [$ 1 = "alles"]
dan
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "beskriuwing"]
dan
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

oars
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
oars
as [$ 1 = "alles"]
dan
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "beskriuwing"]
dan
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
oars
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

De iennige bit dat ekstra is yn dat skript is in oare eksterne IF-oanfetting as folgjend: as [$ # -eq 2] . As jo ​​it artikel oer ynputparameters lêze, dan sille jo witte dat $ $ in tal fan it oantal ynfierparameters weromkommt. De -eq stiet foar lykweardich. De IF-ferklearring dus kontrolearret dat de brûker 2 parameter ynfierd hat en as se it net allinne ferlitte sûnder wat te dwaan. (Net benammen freonlik).

Ik wit dat dit tutorial hiel gewoan is. It is net folle mear om dizze wike te behannelen, mar ik wol it skript helpe om foardat wy einigje.

It ienige lêste kommando dat jo nedich hawwe om te learen oer bedrigingskema's is de CASE-ferklearring.

#! / bin / bash


as [$ # -eq 2]
dan
Ynfalle $ 2 yn
aboutdotcom)
Ynfalle $ 1 yn
alle)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
beskriuwing)
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)
Ynfalle $ 1 yn
alle)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
beskriuwing)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
titel)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

De saakkundige ferklearring is in noflike manier om te skriuwen IF ELSE IF ELSE IF ELSE IF.

Bygelyks dizze logika

IF fruit = Bananen
THEN dit
ELSE IF fruit = oranje
THEN dit
ELSE IF fruit = druiven
THEN dit
OPHALDE AS

kinne skreaun wurde as:

Wetter - Agrarwetter
bananas)
dit dwaan
;;
orangen)
dit dwaan
;;
grapes)
dit dwaan
;;
esac

Yn haadsaak is it earste item nei it gefal it ding dat jo fergelykje (dus fruit). Dan elke punt foar de kluzers is it ding dat jo fergelykje tsjin en as it oerienkomt oer de linen; sil rûn wurde. In case statement is terminated with the reverse esac (which is case backwards).

Yn it rssget.sh-skript fuortsrjochtet de saak-ferklearring in pear fan dy skriklike nêst mar hoewol it net genôch ferbettert.

Om echt it skript ferbetterje te kinnen haw ik jo foar farianten yn te fieren.

Sjoch nei de folgjende koade:

#! / bin / bash

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

as [$ # -lt 2] || [$ # -t 2]
dan
echo "usage: rssget.sh [alle | description | title] [aboutdotcom | lxer]";
útgong;
fi

Ynfalle $ 1 yn
alle)
display = "- d -l -u"
;;
beskriuwing)
display = "- d -u"
;;
titel)
display = "- u"
;;
esac

Ynfalle $ 2 yn
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

In fariant wurdt definiearre troch it jaan fan in namme en dêrnei in wearde werom te jaan. Yn it boppeneamde foarbyld binne de folgjende fariabele opdrachten:

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

It skript is fuortdaliks mear beheare troch fariabelen. Bygelyks elke parameter wurdt apart apart behannele en sa binne der gjin nebele IF-ferklearrings.

De werjefte fariabele is no ynstallearre ôfhinklik fan oft jo alle, beskriuwing of titel keazen hawwe, en de url-fariabele is ynsteld op de wearde fan 'e omdotcom-fariabele of de wearde fan' e lxer-fariabele ôfhinklik of ôfdieling ofdotcom of lxer.

It kommando rsstail hat no krekt de wearde fan it werjaan te brûken en url om korrekt út te fieren.

Wyls fergelykbere farianten ynsteld binne troch se in namme te jaan, om har eins brûke te kinnen moatte jo in $ teken pleatse foar harren. Mei oare wurden binne variable = wearde-sets omskreaun foar in wearde, wylst $ variable betsjut my de ynhâld fan de fariabele.

It folgjende is it lêste skript foar dit tutorial.

#! / bin / bash

lxer = "lxer.com/module/newswire/headlines.rss"
aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"
everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"
linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"
usage = "usage: rssget.sh [alles | description | title] [lxer | aboutdotcom | everydaylinuxuser | linuxtoday]"
display = ""
url = ""

as [$ # -lt 2] || [$ # -t 2]
dan
echo $ usage;
útgong;
fi

Ynfalle $ 1 yn
alle)
display = "- d -l -u"
;;
beskriuwing)
display = "- d -u"
;;
titel)
display = "- u"
;;
*)
echo $ usage;
útgong;
;;
esac

Ynfalle $ 2 yn
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ usage;
útgong;
esac

rsstail $ display $ url;

It boppeste skript pleatst mear RSS-feeds en der is in gebrûk fan fariant dy't de brûker fertelt hoe't jo it skript brûke as se net 2 fariabelen yntinke of se falle opsjes foar de fariabelen yn.

Gearfetting

Dit is in epysk artikel en kin ek te gau te fier gien wêze. Yn 'e folgjende gids sil ik jo alle fergelykbere opsjes foar IF-ferklearrings sjen litte en der is noch folle mear om te praten oer ynteresses foar farianten.

Der is ek mear dat kin wurde om it boppeste skript te ferbetterjen en dit sil yn takomme gids behannele wurde as wy ûndersykje loops, grep en reguliere útdrukkings.

Skeakelje hoe't jo de folgjende siden sjen litte (sjoch nei de kategoryen om in list fan artikels te besjen) fan l inux.about.com om mear nuttige riden te finen út dual-booting Windows en Ubuntu om in virtuele masine te meitsjen mei gebrûk fan GNOME .