Udhëzuesi i Fillestarëve për BASH - Kushtet dhe Variablat

Prezantimi

Mirësevini në pjesën e tretë të "Udhëzuesit për fillestar të BASH". Nëse keni humbur dy artikujt e mëparshëm atëherë ndoshta dëshironi të dini se çfarë e bën këtë udhëzues të ndryshëm nga udhëzuesit e tjerë të shkrimit të AABH.

Ky udhëzues po shkruhet nga një fillestar i plotë në BASH dhe si një lexues që mëson si mësoj. Përderisa unë jam një rishtar për BASH unë nuk vijnë nga një sfond të zhvillimit të softuerit edhe pse shumica e gjërave që kam shkruar ka qenë për platformën e Windows.

Ju mund t'i shihni dy udhëzuesit e parë duke vizituar:

Nëse jeni i ri për të shkruar në BASH unë rekomandoj leximin e dy udhëzuesve të para përpara se të vazhdoni me këtë.

Në këtë udhëzues do të theksoj se si të përdoren deklarata të kushtëzuara për të testuar të dhënat e përdoruesit dhe për të kontrolluar se si funksionon skripti.

Instalo rsstail

Në mënyrë që të ndiqni këtë udhëzues do t'ju duhet të instaloni një aplikacion të linjës së komandës të quajtur rsstail që përdoret për të lexuar RSS feeds .

Nëse përdorni një lloj shpërndarje të bazuar në Debian / Ubuntu / Mint :

sudo apt-get instaloni rsstail

Për Fedora / CentOS etj shkruani sa vijon:

yum instaloni rsstail

Për openSUSE shkruani sa vijon:

zypper instaloni rsstail

Deklarata e IF

Hapni një terminal dhe krijoni një skedar të quajtur rssget.sh duke shtypur në vijim:

sudo nano rssget.sh

Brenda redaktorit nano shkruani tekstin e mëposhtëm:

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

Ruani skedarin duke shtypur CTRL dhe O dhe pastaj dilni duke shtypur CTRL dhe X.

Run script duke shtypur në vijim:

sh rssget.sh

Skenari do të kthejë një listë të titujve nga linux.about.com RSS feed.

Nuk është një dorëshkrim tepër i dobishëm sepse thjesht merr titujt nga një RSS, por nuk ruan për të kujtuar shtegun në RSS feedin e Linux.about.com.

Hapni përsëri skriptin rssget.sh në nano dhe modifikoni skedarin për të parë si më poshtë:

#! / bin / bash

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

Run script përsëri duke shtypur në vijim:

sh rssget.sh verbose

Këtë herë, RSS-i vjen me titullin, lidhjen dhe përshkrimin.

Le të analizojmë skenarin në disa detaje:

#! / Bin / bash shfaqet në çdo skript që shkruajmë. Linja tjetër në thelb sheh parametrin e parë të hyrjes të dhënë nga përdoruesi dhe e krahason atë me fjalën "e folur". Nëse parametri i hyrjes dhe fjala "e folur" përputhen me linjat midis asaj kohe dhe fi janë të rrjedhura.

Skenari i mësipërm është me të meta. Çfarë ndodh nëse nuk jepni fare një parametër të hyrjes? Përgjigjja është që ju të merrni një gabim përgjatë linjave të operatorit të papritur.

Gabimi tjetër i madh është se në qoftë se nuk jepni fjalën "të folur" atëherë asgjë nuk ndodh fare. Idealisht nëse nuk e jep fjalën e folur, shkrimi do të kthejë një listë të titujve.

Përdorni përsëri nano për të redaktuar skedarin rssget.sh dhe për të ndryshuar kodin si më poshtë:

#! / bin / bash

nëse [$ 1 = "verbose"]
atëherë
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
tjetër
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Ruani skedarin dhe e drejtojeni duke shtypur:

sh rssget.sh verbose

Do të shfaqet një listë titujsh, përshkrime dhe lidhje. Tani drejtojeni përsëri si më poshtë:

sh rssget.sh tituj

Këtë herë shfaqet vetëm një listë e titujve.

Pjesa shtesë e shkrimit është në linjën 4 dhe paraqet deklaratën tjetër . Në thelb shkrimi tani thotë nëse parametri i parë është fjala "e folur" të marrë përshkrimin, lidhjet dhe titujt për RSS por nëse parametri i parë është diçka tjetër thjesht të marrë një listë të titujve.

Skenari është përmirësuar pak, por është ende me të meta. Nëse nuk arrin të futësh një parametër, do të vazhdosh të jesh gabim. Edhe nëse ju jepni një parametër, vetëm duke thënë se nuk doni të folur nuk do të thotë që doni vetëm tituj. Ju mund të keni shkruar vetëm gabim të gabuar për shembull ose ju mund të keni shtypur pëllumbat e cila është sigurisht e pakuptimtë.

Para se të përpiqemi dhe t'i qartësojmë këto çështje, dua t'ju tregoj një komandë tjetër që shkon me deklaratën IF.

Redakto shkrimin tuaj rssget.sh për të parë si vijon:

#! / bin / bash

nëse [$ 1 = "të gjithë"]
atëherë
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "përshkrimi"]
atëherë
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

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

I vendosur për të hequr qafe fjalën verbose dhe e zëvendësoi atë me të gjithë. Kjo nuk është pjesa e rëndësishme. Skenari i mësipërm prezanton elifin, i cili është një mënyrë e shkurtër për të thënë ELSE IF.

Tani shkrimi funksionon si më poshtë. Nëse ju drejtuar sh rssget.sh të gjitha atëherë ju merrni përshkrimet, lidhjet dhe titujt. Nëse në vend të kësaj ju vetëm të drejtuar sh rssget.sh përshkrim ju do të merrni vetëm tituj dhe përshkrimet. Nëse jepni ndonjë fjalë tjetër do të merrni një listë të titujve.

Kjo paraqet një mënyrë për të shpejt të dalë me një listë të deklaratave të kushtëzuara. Një mënyrë alternative për të bërë ELIF është përdorimi i asaj që njihet si deklarata IF e mbivendosur.

Më poshtë është një shembull që tregon se si funksionojnë IF deklaratat e mbivendosur:

#! / bin / bash

nëse [$ 2 = "aboutdotcom"]
atëherë
nëse [$ 1 = "të gjithë"]
atëherë
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "përshkrimi"]
atëherë
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

tjetër
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
tjetër
nëse [$ 1 = "të gjithë"]
atëherë
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "përshkrimi"]
atëherë
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
tjetër
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Ndjehen të lirë për të tipit të gjitha në qoftë se ju pëlqen ose kopjoni dhe ngjisni atë në dosjen tuaj rssget.sh.

Skenari i mësipërm paraqet një parametër të dytë që ju lejon të zgjidhni ose "about.com" ose "lxer.com" një RSS feed.

Për të drejtuar atë ju shkruani në vijim:

sh rssget.sh gjitha aboutdotcom

ose

sh rssget.sh të gjitha lxer

Natyrisht, mund të zëvendësoni të gjitha me përshkrime ose tituj për të dhënë vetëm përshkrime ose thjesht tituj.

Në thelb, kodi i mësipërm thotë nëse parametri i dytë është aboutdotcom pastaj shikoni në deklaratën e dytë nëse është e njëjtë nga shkrimi i mëparshëm tjetër nëse parametri i dytë është lxer pastaj shikoni në deklaratën e brendshme nëse përsëri për të vendosur nëse do të tregojnë tituj, përshkrime ose gjithçka.

Ky dorëshkrim jepet thjesht si një shembull i një deklarate IF të mbivendosur dhe ka kaq shumë gjëra të gabuara me atë skriptë që do të merrte një artikull tjetër për t'i shpjeguar të gjithë. Çështja kryesore është se nuk është e shkallëzuar.

Imagjinoni sikur dëshironi të shtoni një tjetër RSS, si Përdoruesi i përditshëm Linux apo Linux Sot? Skenari do të bëhej i madh dhe nëse do të donit që ndryshimi i deklaratës së brendshme IF do të duhej ta ndryshonit në vende të shumta.

Përderisa ka një kohë dhe vend për një IF të mbivendosur ata duhet të përdoren me masë. Ka zakonisht një mënyrë për të refactor kodin tuaj në mënyrë që ju nuk keni nevojë për të mbivendosur IF në të gjitha. Do të vij në këtë temë në një artikull të ardhshëm.

Le të shikojmë tani për të ndrequr çështjen e njerëzve që hyjnë në parametrat duff. Për shembull në skriptin e mësipërm nëse përdoruesi hyn diçka tjetër përveç "aboutdotcom" si parametri i dytë atëherë një listë e artikujve shfaqen nga RSS feed nga LXER pavarësisht nëse përdoruesi futet lxer ose jo.

Përveç kësaj, nëse përdoruesi nuk fut "të gjithë" ose "përshkrimin" si parametër 1 atëherë default është një listë e titujve që mund të jenë apo jo të jenë ato që përdoruesi ka për qëllim.

Shikoni skriptin e mëposhtëm (ose kopjoni dhe ngjiteni në skedarin tuaj rssget.sh.

#! / bin / bash

nëse [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
atëherë
nëse [$ 1 = "all"] || [$ 1 = "përshkrimi"] || [$ 1 = "titulli"]
atëherë
nëse [$ 2 = "aboutdotcom"]
atëherë

nëse [$ 1 = "të gjithë"]
atëherë
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "përshkrimi"]
atëherë
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

tjetër
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
tjetër
nëse [$ 1 = "të gjithë"]
atëherë
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "përshkrimi"]
atëherë
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
tjetër
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Gjëja e parë që duhet të vihet në dukje është se skenari tani po bëhet mjaft i madh dhe ju mund të shihni shpejt se si mund të bëhen deklaratat e mbivendosur IF të kontrollit.

Pika që është e rëndësishme në këtë dorëshkrim është deklarata IF. | deklaratë PAS seksionin në vijën 2 dhe vijën 4.

| | qëndron për OR. Pra linja nëse [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"] kontrollon nëse parametri i dytë është i barabartë me "aboutdotcom" ose "lxer". Nëse nuk është atëherë deklarata IF është e plotë sepse nuk ka asnjë deklaratë tjetër për pjesën më të madhe IF.

Në mënyrë të ngjashme në linjën 4 vijë nëse [$ 1 = "all"] || [$ 1 = "përshkrimi"] || [$ 1 = "title"] kontrollon nëse parametri i parë është i barabartë me "të gjithë" ose "përshkrimin" ose "titullin".

Tani në qoftë se përdoruesi shkon sh rssget.sh patate djathë nuk është kthyer asgjë, ndërsa para se ata do të kishin marrë një listë të titujve nga LXER.

E kundërta e || është &&. Operatori && operon AND.

Unë do ta bëj skenarin edhe më shumë si një makth, por e bën kontrollin e rëndësishëm për të siguruar që përdoruesi ka dhënë 2 parametra.

#! / bin / bash

nëse [$ # -eq 2]
atëherë

nëse [$ 2 = "aboutdotcom"] || [$ 2 = "lxer"]
atëherë
nëse [$ 1 = "all"] || [$ 1 = "përshkrimi"] || [$ 1 = "titulli"]
atëherë
nëse [$ 2 = "aboutdotcom"]
atëherë

nëse [$ 1 = "të gjithë"]
atëherë
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = "përshkrimi"]
atëherë
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

tjetër
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
tjetër
nëse [$ 1 = "të gjithë"]
atëherë
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = "përshkrimi"]
atëherë
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
tjetër
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

E vetmja gjë që është ekstra në atë skenar është një tjetër deklaratë e jashtme IF si më poshtë: nëse [$ # - eq 2] . Nëse lexoni artikullin në lidhje me parametrat e hyrjes, do të dini që $ # kthen numërimin e numrit të parametrave të hyrjes. Eq qëndron për të barabartë. Deklarata IF, pra, kontrollon që përdoruesi ka hyrë në dy parametra dhe nëse ata nuk kanë dalë pa bërë asgjë. (Jo veçanërisht miqësore).

Unë jam i vetëdijshëm se ky tutorial po bëhet mjaft i madh. Nuk ka shumë më tepër për të mbuluar këtë javë, por unë dua të ndihmoj të rregulloj skenarin para se të mbarojmë.

Komanda e fundit që ju duhet të mësoni për deklaratat e kushtëzuara është deklarata CASE.

#! / bin / bash


nëse [$ # -eq 2]
atëherë
rasti $ 2 në
aboutdotcom)
rasti $ 1 në
të gjitha)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
përshkrim)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
title)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
rasti $ 1 në
të gjitha)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
përshkrim)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
title)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Deklarata e rastit është një mënyrë më e bukur për të shkruar NËSE MUND T'I MËSOJM NËSE MUND.

Për shembull, kjo logjikë

IF fruta = banane
PASTAJ këtë
ELSE NËSE fruta = portokall
PASTAJ këtë
ELSE NËSE PJESË = rrush
PASTAJ këtë
PËRFUNDIM NËSE

mund të rishkruhen si:

rast fruti në
banane)
bëni këtë
;;
portokall)
bëni këtë
;;
rrushi)
bëni këtë
;;
esac

Në thelb pika e parë pas rastit është gjëja që ju do të krahasoni (p.sh. fruta). Pastaj secili artikull përpara kllapave është gjëja që po krahasoni dhe nëse përputhet me linjat që i paraprijnë ;; do të vrapoj. Një deklaratë e rastit përfundon me ESAC të kundërt (që është rasti prapa).

Në shkrimin rssget.sh deklarata e rastit heq disa nga ato folje të tmerrshme edhe pse jo me të vërtetë përmirësimin e mjaftueshëm.

Për të përmirësuar me të vërtetë dorëshkrimin unë duhet t'ju prezantoj variablave.

Shikoni kodin e mëposhtëm:

#! / bin / bash

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

nëse [$ # -lt 2] || [$ # -gt 2]
atëherë
echo "përdorimi: rssget.sh [gjithë | përshkrimi | titulli] [aboutdotcom | lxer]";
dalje;
fi

rasti $ 1 në
të gjitha)
shfaq = "- d -l -u"
;;
përshkrim)
shfaq = "- d -u"
;;
title)
ekran = "- u"
;;
esac

rasti $ 2 në
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

Një ndryshore përcaktohet duke i dhënë një emër dhe pastaj duke caktuar një vlerë për të. Në shembullin e mësipërm në vijim janë caktimet e variablave:

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

Skenari është menjëherë më i menaxhueshëm duke përdorur variabla. Për shembull çdo parametër trajtohet veçmas dhe kështu nuk ka deklarata IF të mbivendosur.

Variabli i ekranit është vendosur tani në varësi të faktit nëse keni zgjedhur të gjithë, përshkrimin ose titullin dhe variabli url është vendosur në vlerën e variablit arounddotcom ose në vlerën e ndryshores lxer varësisht nëse keni zgjedhur aboutdotcom ose lxer.

Komanda rsstail tani vetëm duhet të përdorë vlerën e ekranit dhe url për të funksionuar siç duhet.

Përderisa variablet janë vendosur vetëm duke u dhënë atyre një emër, për t'i përdorur ato në të vërtetë ju duhet të vendosni një shenjë $ para tyre. Me fjalë të tjera, variable = value përcakton variablën në një vlerë ndërsa $ variabël do të thotë të jap përmbajtjen e ndryshores.

Më poshtë është skripti i fundit për këtë 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"
përdorimi = "përdorimi: rssget.sh [gjithë | përshkrimi | titulli] [lxer | aboutdotcom | dailylinuxuser | linuxtoday]"
ekran = ""
url = ""

nëse [$ # -lt 2] || [$ # -gt 2]
atëherë
echo $ përdorim;
dalje;
fi

rasti $ 1 në
të gjitha)
shfaq = "- d -l -u"
;;
përshkrim)
shfaq = "- d -u"
;;
title)
ekran = "- u"
;;
*)
echo $ përdorim;
dalje;
;;
esac

rasti $ 2 në
aboutdotcom)
url = $ aboutdotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
everydaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ përdorim;
dalje;
esac

rsstail $ display $ url;

Skenari i mësipërm prezanton më shumë RSS feeds dhe ekziston një variacion përdorimi i cili i tregon përdoruesit se si të përdorë skriptin nëse ata ose nuk hyjnë në 2 variabla ose ata hyjnë në opsionet e gabuara për variablat.

përmbledhje

Ky ka qenë një artikull epik dhe mund të ketë shkuar shumë larg së shpejti. Në udhëzuesin e ardhshëm unë do t'ju tregoj të gjitha opsionet e krahasimit për deklaratat IF dhe ka ende shumë më tepër për të folur në lidhje me variablat.

Ekziston edhe më shumë që mund të bëhet për të përmirësuar skenarin e mësipërm dhe kjo do të mbulohet në udhëzuesit e ardhshëm ndërsa shqyrtojmë sythe, grepë dhe shprehje të rregullta.

Shikoni Si të (shkoni poshtë kategorive të kaluara për të parë një listë artikujsh) l inux.about.com për të gjetur udhëzues më të dobishëm nga futja e dyfishtë e Windows dhe Ubuntungritjen e një makine virtuale duke përdorur kutitë e GNOME .