; TeX output 2003.04.04:1513_2 ~?ՁZݺIqqecss2074BASHfProgrammering-IntroductieHOwmW-TO cG 1 ecrm1000doGorU MikeGqL ectt1000mikkey?atdynamo.com.arV*ertaaldU doGor:qEllenBokhorst,bokkieatnl.linux.orgmDojul2709:36:18AR*T2000&6 ecss1000DitartikelisbGedoeldomjetehelpGeneenbegintemakenmethetprogrammerenvanbasistotmiddelmatigeshell-scripts.`Het"IisnietbGedoeld"IalseendoGcumentvoorgevorderden(ziedetitel).`IkbGenGEEN"troQductie}83ؼ1.1%OphalenU vqandelaatsteversieb[.荍...................................w31.2%BenoGdigdheden.荍...........................................w31.3%GebruikU vqanditdoGcument읍.荍.....................................w32Zeereen>voudigeScriptsI"32.1)RT*raditioneelU helloworldscript.荍..................................w42.2%EenU zeereenvoudigU backupscript .荍.................................w43Alleso>veromleidingZJ43.1%TheorieU ensnellenaslag6ˍ.荍......................................w43.2%V*oGorbeeld:qstdoutU naarbGestand.荍..................................w53.3%V*oGorbeeld:qstderrU naarbGestand.荍..................................w53.4%V*oGorbeeld:qstdoutU naarstderr[_.荍...................................w53.5%V*oGorbeeld:qstderrU naarstdout[_.荍...................................w53.6%V*oGorbeeld:qstderrU enstdoutnaarbGestandW.荍............................w54PipQesr*64.1%W*atU hetzijnenwaarvoGorU jehetzoukunnengebruikenX#.荍.....................w64.2%V*oGorbeeld:qeenvoudigeU pipGemetsedc[.荍...............................w64.3%V*oGorbeeld:qeenU alternatiefvoGorls-l*.txts.荍............................w65V ariabQelenW65.1)RV*oGorbeeld:qHelloU World!doGorU gebruiktemakenvqanvariabGelenY.荍................w65.2)RV*oGorbeeld:qEenU zeereenvoudigU backupscript(ietsbGeter){.荍....................w75.3%LokqaleU variabGelen.荍..........................................w7*_2 ~?GINHOUDSOPGAVEh2ՁV6V oQorw>aardelijkeopdrachten4DC7ؼ6.1)RDrogeU Theorie.荍...........................................w76.2)RV*oGorbeeld:qBasisU voorwaardelijkeU opdrachtU if..qthenK.荍......................w86.3)RV*oGorbeeld:qVoorbeeldU basisvoGorwaardelijkeU opdrachtU if..qthen...else S.荍...........w86.4)RV*oGorbeeld:qVoorwaardelijkeU opGdrachtenmetvqariabGelen .荍....................w87LoQopsfor,whileenun>tilE87.1%V*oGorbeeldU metfor<.荍.........................................w97.2%MetU CvergelijkendeU for.荍......................................w97.3%V*oGorbeeldU metwhile6K.荍........................................w97.4%UntilU voGorbeeld.荍...........................................w98F uncties108.1%V*oGorbeeldU vqaneenfunctie7#.荍.....................................x?108.2%V*oGorbeeldU vqaneenfunctiemetparametersr.荍............................x?109Gebruik>ersinterfacesT5119.1%HetU gebruikvqanselectomeenvoudigeU menu'stemaken.荍....................x?119.2)RGebruikU makenvqandeopGdrachtregel'%.荍..............................x?1110Div>ersenN71110.1%InlezenU vqangebruikersinvoGerU metread.荍..............................x?1110.2)RRekenkundigeU waardebGepalenw獍.荍..................................x?1210.3%BashU zoGekenCK.荍.............................................x?1210.4%DeU returnwaardevqaneenprogrammaverkrijgenP.荍........................x?1310.5%AfvqangenU vandeuitvoGervaneenopGdracht@獍.荍............................x?1310.6%MeerdereU bronbGestanden(Í.荍......................................x?1311T abQellen1311.1%StringvergelijkingsU opGeratoren".荍...................................x?1311.2%StringvergelijkingU voGorbeelden[.荍...................................x?1411.3%RekenkundigeU opGerators+.荍......................................x?1411.4%RekenkundigeU relationeleopGerators/.荍................................x?1411.5%HandigeU opGdrachteno .荍........................................x?1512MeerScriptszk1812.1)REenU opGdrachttoGepassenvoGorallebestandenineendirectory*. 󍍑.荍................x?1812.2)RV*oGorbeeld:qEenU zeereenvoudigU backupscript(ietsbGeter)Xc.荍...................x?1812.3)RBestandshernoGemerÍ.荍........................................x?18_2 ~?G1.8In>troQductieY̹3ՁV12.4)RBestandshernoGemerU (eenvoudig)Ӎ.荍.................................x?2013W anneererietsnietgoQedgaat(debuggen)20ؼ13.1)RManierenU omBASHaanteroGepenF󍍑.荍................................x?2014Ov>erhetdoQcumentY2014.1%(geen)U garantie .荍...........................................x?2014.2%V*ertalingenQC.荍.............................................x?2014.3%MetU dankaan.荍............................................x?2114.4%Historie.荍...............................................x?2114.5%MeerU bronnenveromleidingXo޹4ՁV2.1#=Traditioneelhelloworldscript+H=qL ectt0900#!/bin/bash =H=echoNHelloWorldؼDit_scriptbGestaatslechts_uittwee_regels.=Indeeersteregelwordthetsysteemduidelijkgemaaktwelk programmaU moGetwordengebruiktomhetbestanduittevoeren.ؼDeU tweederegelbGestaatuitalleendieactiewaarmee'HelloW*orld!qopdeterminalwordtafgedrukt.Als2~jeietskrijgtals./hello.sh:0Command_Xnotfound. is2~waarschijnlijkdeeersteregel`#!/bin/bash'nietgoGed,U roep`whereisbash'ofzie`bashzoeken'omtebezienhoejedezeregelzoumoetenschrijven.#Í2.2Eenzeereenvoudigbackupscript+>r#!/bin/bash =>rtarN-cZf/var/my-backup.tgz/home/me/ؼIn plaatsdaternueenbGerichtopdeterminalwordtweergegeven,ʇmakenweinditscripteentar-ballvqandehomedirectoryvqaneengebruiker.^ HetisnietdebGedoelingdatditwordtgebruikt.^ LaterinditdoGcumentwordtU eenhandigerbackupscriptgepresenteerd.(3AllesG\ocveromleiding荍3.1TheorieensnellenaslagMErU zijn3ledescriptors,stdin,stdoutenstderr(std=standaard).ؼInU principGekunje:ؼ 9b1.stdoutU naareenbGestandomleiden 9b2.stderrU naareenbGestandomleiden 9b3.stdoutU naarstderromleiden 9b4.stderrU naarstdoutomleiden 9b5.stderrU enstdoutnaareenbGestandomleiden 9b6.stderrU enstdoutnaarstdoutomleiden 9b7.stderrU enstdoutnaarstderromleiden1U iseenrepresentatievqanstdouten2vanstderr.ؼEen :opmerkinghierover:Kmet :deopGdracht :lesskunjezowel :stdout(welke :indebuerblijft)enstderr,hwelke opU hetschermwordtweergegeven,bGekijken,maarisverwijderdalsjedoGordebuerprobeertte'bladeren'._a_2 ~?G3.8Alleso>veromleidingXo޹5ՁV3.2Vo_orbeeld:stdoutnaarb_estandMHiermeeU wordtdeuitvoGervqaneenprogrammanaareenbestandweggeschreven.ݩ>rlsN-l>ls-l.txt =HierzaleenbGestand,6genaamd'ls-l.txt'wordenaangemaaktenhierinzalwordenopgevqangenwatjekrijgt alsU jedeopGdrachtU 'ls-l'typtenuitvoGert."X3.3Vo_orbeeld:stderrnaarb_estandDitU zorgtdatdeuitvoGervqanstderrvaneenprogrammanaareenbGestandwordtweggeschreven.>rgrepNda*2>grep-errors.txt =HiergzaleenbGestand,lgenaamd'grep-errors.txt'wordenaangemaaktenhierzaldanhetstderrgedeeltevqan deU uitvoGerinstaanvqandeopdrachtU 'grepda*'."X3.4Vo_orbeeld:stdoutnaarstderrDitzzorgtdatdesterruitvoGervqaneenprogrammanaardezelfdeledescriptoralsstdoutwordtweggeschreven.>rgrepNda*1>&2 =Hier9wordthetstdoutgedeeltevqandeopGdrachtnaarstderrgezonden,jemerktdatmogelijkopverschillende manieren."X3.5Vo_orbeeld:stderrnaarstdoutDitr*zorgtdatdestderruitvoGervqaneenprogrammanaardezelfdeledescriptorwordtweggeschrevenalsstdout.ݩ>rgrepN*2>&1 =HierwordthetstderrgedeeltevqandeopGdrachtnaarstdoutgestuurd,-alsjemiddelseenpipGe-symbooldeuitvoGer]onaarlessstuurt,zuljeziendatderegelsdienormaalgesproken'verdwijnen'(alszenaarstderrwordenU geschreven)nubGehoudenblijven(omdatzezichopstdoutbGevinden)."X3.6Vo_orbeeld:stderrenstdoutnaarb_estandHiermee8zalalleuitvoGervqaneenprogrammaineenbestandwordengeplaatst.KSomsisditgeschiktvoGorcronentries,U alsjeeenopGdrachtinabsolutestiltewiltlatenuitvoGeren.ݩ>rrmN-f$(find/-namecore)&>/dev/null =Ditl((denkendaaneencronentry)zaliederbGestandgenaam'core'iniederedirectoryverwijderen.MerkopdatU jeernogalzekervqanmoGetzijnwateenopGdrachtdoGetalsjedeuitvoGerervqangaatverwijderen.h5_2 ~?G4.8PipQesN6ՁV4Pippes:InNdezesectiewordtopeenzeereenvoudigeenpraktischewijzeuitgelegdhoGegebruiktemakenvqanhet pipGe-symboolU enwaarvoGorjehetzoukunnengebruiken.#Í4.1Wathetzijnenwaarvo_orjehetzoukunnengebruikenMPipGe-symbolen_:latenjegebruikmakenvqan(zeereenvoudiguitgelegd)deuitvoGervqaneenprogrammaalsdeinvoGerU vqaneenanderprogramma.4.2Vo_orbeeld:eenvoudigepip_emetsedMDitU iseenzeereenvoudigeU manieromgebruiktemakenvqaneenpipGe-symbool.卑lsN-l|sed-e"s/[aeio]/u/g"ؼW*aterhiergebGeurtishetvolgende:eerstwordtdeopGdracht'ls-l'uitgevoGerd,eninplaatsdatdeuitvoGerervqanUwordtafgedrukt,Uwordthetnaarhetprogrammasedgestuurd(pipGed),UwatopzijnbGeurtafdruktwathetU moGetafdrukken.4.3Vo_orbeeld:eenalternatiefvo_orls-l*.txtMW*aarschijnlijkisditeenmoGeilijkeremanieromeenls-l*.txtuittevoGeren,maarhetdienthierterillustratie,nietU voGorhetoplossenvqaneenopsommingsdilemma.卑lsN-l|grep"\.txt$"ؼHierwordtdeuitvoGervqanhetprogrammals-lnaarhetgrepprogrammagezonden,welkeopzijnbGeurtderegelsU afdruktdieovereenkomenU metdereguliereexpressie"n.txt$".(5V(ariabpelen:JekuntnetalsiniedereandereprogrammeertaalgebruikmakenvqanvariabGelen.>Erzijngeengegevenstypen.OnderU bashkqaneenvariabGelebestaanuiteennummer,eenteken,ofeenreekstekens.ؼJekhoGefteenvqariabeleniettedeclareren.Doorerslechtskeenwaardeaantoetekennenzalhetwordenaangemaakt.5.1#=Vo_orbeeld:HelloWorld!do_orgebruiktemakenv@ anvariab_elen+Q#!/bin/bash =QSTR="HelloNWorld!"QechoN$STRؼInqregel2wordteenvqariabGeleaangemaaktmetdenaamSTRpenhieraanwordtdestring"Hello W*orld!"toGegekend.IDeGWAARDEGvqandezevariabGelewordtvervolgensopgehaalddoGorereen'$'voGorteplaatsen. Leteralsjeblieftop(probGeerhetuit!)datalsjehet'$'tekennietgebruikt,deuitvoGervqanhetprogrammaU ietsanderszalzijn,enhetwaarschijnlijkU nietdatgenezalzijnwatjewiltdat'tis.q_2 ~?G6.8V oQorw>aardelijkeopdrachten2 ׹7ՁV5.2#=Vo_orbeeld:Eenzeereenvoudigbackupscript(ietsb_eter)wύL\#!/bin/bash =L\OF=/var/my-backup-$(dateN+%Y%m%d).tgzL\tarN-cZf$OF/home/me/3InditscriptwordtietsandersgentroGduceerd.OT*eneerstezoujenubGekendmoGetenzijnmetdeaanmaak vqandevariabGeleendetoekenninginregel2.[Letopdeexpressie`$(date+%Y%m%d)'.AlsjehetscriptuitlaatU voGeren,zaljebemerkendathetdeopdrachtU binnendehaakjesuitvoert,endeuitvoerervqanafvangt.ؼMerkgopdatdenaamvqanhetbGestand,kdeuitvoer,kiederedaganderszalzijn,vqanwegegdeopmaakoptievandeU opGdrachtdate(+%Y%m%d).qJekuntditwijzigendoGoreenanderformaatoptegeven.NogU watmeervoGorbeelden:echoU lsechoU $(ls)";5.3Lok@ alevariab_elenMLokqaleU variabGelenkunnenwordenaangemaaktdoorgebruiktemakenvqanhetkeywordlo}/calw.>r#!/bin/bash =>rHELLO=Hello>rfunctionNhello{dlocalNHELLO=WorlddechoN$HELLO>r}>rechoN$HELLO>rhello>rechoN$HELLO3DitU voGorbeeldzougenoegmoetenzijnomaantetonenhoejeeenlokqalevariabGelegebruikt.(L6V(oporwcaardelijkeG\opdrachten:V*oGorwaardelijked#opdrachtend#latenjeeenbeslissingnemenofeenactiewelofnietzalwordenuitgevoGerd,gde bGeslissingU wordtgenomendoordewaardetebepalenvqaneenexpressie.6.1#=DrogeTheorieMV*oGorwaardelijkeopdrachtenbestaanerinveelvormen.UhDebasisvormis:G\ifexpr}/essie(thenstatementhierbijwordtU 'statement'alleenuitgevoGerdwanneerde'expressie'dewaardetrueoplevert.ؼ`2 b> cmmi10<1'U iseenexpressiediedewaardefalseoplevert,terwijl`2>1'dewaardetrueoplevert.Er!zijnnoganderevormenvoGorwaardelijkeopGdrachten,zoals:ifexpr}/essielpthenstatement1elsestatement2Z. HierU wordt'statement1'uitgevoGerdalsde'expressie'trueoplevert,anderswordt'statement2'uitgevoGerd.NogeenanderevormvqaneenvoGorwaardelijkeopGdrachtis:]ifexpr}/essie1tthenstatement1elsedifex-pr}/essie2thenstatement2elsestatement3Indezevormisslechtsde"ELSEIF'expressie2'THEN'state-ment2'"toGegevoegdkwatmaaktdatstatement2wordtuitgevoGerdalsexpressie2dewaardetrueoplevert.YDerestU iswatjeerzelfvqanmaakt.q(zievorigevormen).|Р_2 ~?G7.8LoQopsfor,whileenun>tilCa/8ՁVIetsU oversyntax:ؼDeU basisvqaneen'if'constructieonderbashis:ifU [expressie];thencoGdeU als'expressie'istrue."6.2#=Vo_orbeeld:Basisvoorwaardelijkeopdrachtif..thenQ#!/bin/bash =QifN["foo"="foo"];then_۔echoNwaardevanexpressieleverdetrueopQfiwʍDecoGdediezalwordenuitgevoGerdalsdeexpressietussendeblokhakentrueoplevert,istevindenachter het'then'woGordenvoGorhet''woGordwaarmeeheteindevqandevoGorwaardelijkuittevoGerencodewordtaangegeven.6.3#=Vo_orbeeld:Voorbeeldbasisvo_orwaardelijkeopdrachtif..then...elseQ#!/bin/bash =QifN["foo"="foo"];then_۔echoNexpressielevertdewaardetrueopQelse_۔echoNexpressielevertdewaardefalseopQfi6.4#=Vo_orbeeld:Voorwaardelijkeop_drachtenmetv@ ariab_elenQ#!/bin/bashQT1="foo"QT2="bar"QifN["$T1"="$T2"];thendechoNexpressielevertdewaardetrueopQelsedechoNexpressielevertdewaardefalseopQfi(׍7LopopsG\for,whileenunctil:InU dezesectietrefjefor,whileenuntilloGopsaan.ؼDe!rforloGopwerktietsandersdaninandereprogrammeertalen.uEigenlijklaathetjeeenserie'woGorden' binnenU eenstringherhalen.DeOwhilevoGerteenstukcodeuitalsdecontrolerendeexpressietrueoplevert,[enstoptalleenwanneerhetfalseU is(ofalserbinnendeuitgevoGerdecodeeenexplicietebreakwerdgevonden). _2 ~?G7.8LoQopsfor,whileenun>tilCa/9ՁVDe$un>tilloGopisbijnagelijkaandewhileloopbehalvedatdecodewordtuitgevoGerdterwijldecontrolerende expressieU dewaardefalseoplevert.ؼAlsU jehetvermoGedenhebtdatwhileenuntilergopelkqaarlijken,hebjegelijk.#Í7.1Vo_orbeeldmetfor+>r#!/bin/bash =>rforNiin$(ls);doQechoNitem:$i>rdoneؼInU detweedeU regel,declarerenweialsvqariabGelevoGordeverschillendewaardenin$(ls).De(derderegelzouzonoGdiglangerkunnenzijn,oferzoudenmeerregelsvoorkunnenkomenvoGordedone (4).`done'(4)geeftaandatdecoGdediedewaardevqan$igebruiktebeindigdisen$ieennieuwewaardeaankqanU nemen.Ditscriptheeftweinignut,4eneennuttigerwijzeomgebruiktemakenvqandeforloGopzouzijnhetinhetvoGorgaandeU voorbeeldU tegebruikenwaarbijslechtsbGepaaldebestandenovereenkomen.#Í7.2MetCvergelijkendeforMeshkr#!/bin/bash =>rforNiin`seq110`;>rdodechoN$i>rdone7.3Vo_orbeeldmetwhile+C#!/bin/bashCCOUNTER=0CwhileN[ r$COUNTER-lt10];doVhechoNDetelleris$COUNTERVhletNCOUNTER=COUNTER+1CdoneؼDitU script'emuleert'dewelbGekende(C,Pascal,pGerl,enz)'for'structuur7.4Untilvo_orbeeld+C#!/bin/bashCCOUNTER=20CuntilN[ r$COUNTER-lt10];do _2 ~?G8.8F uncties>(10ՁVVhechoNCOUNTER$COUNTER =VhletNCOUNTER-=1Cdone(8F(uncties:Zoals9inbijnaiedereprogrammeertaal,kunjefunctiesgebruikenomstukkencoGdeopeenwatlogischerwijze teU groGeperenofteoefenenindegoddelijkekunstvqanrecursie.ؼHetzdeclarerenvqaneenfunctieisslechtzeenkwestievanhetschrijvenzvanfunctionmijn_funcfmijn_coGdeg.HetZaanroGepenvqaneenfunctieisnetalshetaanroepenvqaniederanderprogramma,OjetiktgewoondenaamervqanU in.#Í8.1Vo_orbeeldv@ aneenfunctie+L\#!/bin/bash =L\functionNquit{dexitL\}L\functionNhello{dechoNHello!L\}L\helloL\quitL\echoNfooؼInderegels2-4staatde'quit'functie.FInderegels5-7staatde'hello'functie.Alsjeernietgeheelzeker vqanU bGentwatditscriptdoGet,probeerhetdanuit!MerkU opdatfunctiesnietineenspGeciekevolgordehoGeventestaan.Bij7hetuitvoGerenvqanhetscript,zaljebemerkendatalseerstedefunctie'hello'wordtaangeroGepen7ententweedeU de'quit'functieendefunctiekomtU noGoitbijregel10.#Í8.2Vo_orbeeldv@ aneenfunctiemetparameters+d#!/bin/bash =dfunctionNquit{rexitd}dfunctionNe{wzechoN$1d}deNHellodeNWorlddquitdechoNfoo _2 ~?G9.8Gebruik>ersinterfacesRѤ11ՁVDitfersen+12ՁVd#!/bin/bash =dechoNVulalsjeblieftjenaamindreadNNAMEdechoN"Hi$NAME!"ؼEenʖvqariantdaaropzalhetvolgendevoGorbeeldʖverduidelijkenwaarmeejemeerderewaardenmetreadkqan verkrijgen.卑d#!/bin/bashdechoNVulalsjeblieftjevoornaamenachternaamindreadNFNLNdechoN"Hi!$LN,$FN!"#Í10.2)`Rekenkundigewaardeb_epalenMProbGeerU hetvolgendeachterdeopGdrachtregel(ofineenshell):ؼechoU 1+1Alsjeverwachtte'2'tezientekrijgen,gzaljewelteleurgesteldzijn.PW*atalsjewiltdatBASHvqaneenaantalgetallenU dewaardebGepaalt?qDitisdeoplossing:echoU $((1+1))Hiermeezaleen'logischer'uitvoGerwordengeproGduceerd.fDitisvoGorhetbepalenvqandewaardevaneenrekenkundigeU expressie.qJekuntditoGokalsvolgtbGereiken:echoU $[1+1]Als5jebreukenofmeerrekenkundenoGdighebtofditgewoGonwilt,mkunjebcgebruikenomdewaardetebGepalenU vqanrekenkundigeexpressies.alsÃikopdeopGdrachtregelÃcho$[3/4]pgaf,zouhet0retournerenomdatbashalleenintegersgebruiktbijbGeantwoording.qAlsU jecho3/4jbc-lpgaf,zouhetopjuistewijze0.75retourneren.#Í10.3%}Bashzo_ekenMUItU eenbGerichtU vqanmike(zieMetdankaan)jeU gebruiktaltijd#!/bin/bash..qjezouwellichtU eenvoGorbeeldkunnenU gevenvqanwaarbashistevinden.deU voGorkeuris'loGcatebash',maarnietopallecomputersisloGcateU genstalleerd.`ndU ./-namebash'vqanafderoGotdirzalgewoonlijkwelwerken.AanbGevolenU tedoorzoekenlocaties:lsU -l/bin/bashlsU -l/sbin/bashlsU -l/usr/loGcal/bin/bashlsU -l/usr/bin/bashlsU -l/usr/sbin/bash _2 ~?G11.8T abQelleny13ՁVlsU -l/usr/loGcal/sbin/bashؼ(kqanU zogeenanderedirectory'sbGedenken...qikhebhetvoGorheenmeestalU welopeenandersysteemopnvqandezeplaatsenU kunnenvinden.JeU zouoGoknog'whichbash'kunnenproberen.#Í10.4%}Dereturnwaardev@ aneenprogrammaverkrijgenMOnder/Bash,_wordtdereturnwaardevqaneenprogrammaineenspGecialevariabGele,_genaamd$?,opgeslagen.HiermeewordtgellustreerdhoGedereturnwaardevqaneenprogrammakanwordenafgevangen,waarbijik ervqanU uitgadatdedirectorydadaunietvoGorkomt.q(OokU ditwaseensuggestievanmike)卑>r#!/bin/bash =>rcdN/dada&>/dev/null>rechoNrv:$?>rcdN$(pwd)&>/dev/null>rechoNrv:$?10.5%}Afv@ angenvandeuitvo_ervaneenop_drachtMDitkleinescriptlaatalletabGellenvqanalledatabaseszien(ervanuitgaandedatjeMySQLhebtgenstalleerd). OverweegԷtevenshetwijzigenvqandeopGdracht'mysql'waarbijeengeldigegebruikersnaamenwachtwoGordwordtU gebruikt.卑>r#!/bin/bash =>rDBS=`mysqlN-uroot r-e"showdatabases"`>rforNbin$DBS;>rdodmysqlN-uroot-e"showtablesfrom$b">rdone10.6%}Meerderebronb_estandenMJeU kuntmetdeopGdrachtsourcemeerderebGestandengebruiken.ؼ__TO-DO__(11%T(abpellen荍11.1%}Stringvergelijkingsop_eratoren(1)U s1=s2(2)U s1!=s2(3)U s1s2_2 ~?G11.8T abQelleny14ՁV(5)U -ns1ؼ(6)U -zs1(1)U s1komtU overeenmets2(2)U s1komtU nietovereenU mets2(3)U __TO-DO__(4)U __TO-DO__(5)U s1isnietgelijkaannull(bGevqatnofmeertekens)(6)U s1isnull#Í11.2%}Stringvergelijkingvo_orbeeldenMV*ergelijkenU vqantweestrings.卑>r#!/bin/bash =>rS1='string'>rS2='String'>rifN[$S1=$S2];>rthendechoN"S1('$S1')isnietgelijkaanS2('$S2')">rfi>rifN[$S1=$S1];>rthendechoN"S1('$S1')isgelijkaanS1('$S1')">rfiؼIkhaalhiereenopmerkingaanvqanuiteenmailingezondendoGorAndreasBeck,#3verwijzendnaarhetgebruik vqanU if[$1=$2] u.ؼDitisnietzo'ngoGedidee,omdatals$S1of$S2leegis,jeeenparseerrorkrijgt.x$1=x$2of"$1"="$2sbGeter.11.3%}Rekenkundigeop_eratorsM+ؼ-*/%U (rest)11.4%}Rekenkundigerelationeleop_eratorsM-ltU (<)-gtU (>)-leU (<=)-geU (>=)_2 ~?G11.8T abQelleny15ՁV-eqU (==)ؼ-neU (!=)CU programmeurszoudendeopGeratoreenvoudigwegU indelennaardeovereenkomstigeU haakjes.#Í11.5%}Handigeop_drachtenMDezeU sectiewerddoGorKeesherschreven(ziemetdankaan...)Een:2paarvqandezeopGdrachten:2zijnbijnavolledigeprogrammeertalen. V*andezeopdrachten:2wordtalleen deebasisuitgelegd.NV*oGoreenmeergedetailleerdebeschrijving, 6kunjedemanpagesvqandeopdrachtenraadplegen.ؼsedU (streameditor)Sed;iseennietinteractieve;editor.hInplaatsdateenbGestandwordtaangepastdoordecursorophetscherm teverplaatsen,Imaakjegebruikvqaneenscriptmetdesed-instructiesengeefjedezealsargumentsamenmethetUtewijzigenbGestandopaansed.>Jekuntsedookalseenlterbeschrijven.>LatenUweeenswatvoGorbeeldenbGekijken:卑>r$sedN's/te_vervangen/vervangen_door/g'/tmp/dummy =ؼSed vervqangtdestring'te_vervqangen'doGordestring'vervqangen_doGor'enleestvanuithet/tmp/dummybGestand.HeteSresultaatzalnaarstdout(normaalgesprokendeconsole)wordengezonden,i`maarjekuntaanheteindevqandezeregeloGok'>capture'toevoegenwaardoorseddeuitvoernaarhetbestand'capture'zalsturen.>r$sedN12,18d/tmp/dummy =ؼSedklaatalleregelszienbGehalvederegels12tot18.3HetoorspronkelijkekbestandwordtdoordezeopdrachtnietU aangepast.ؼa>wkU (manipulatievqangegevensbGestanden,ophalenenverwerkenvqantekst)Er[ bGestaanveelimplementatiesvqandeprogrammeertaalAWK[(debGekendsteinterpreterszijnGNU'sgawk enx'newawk'mawk.)6HetprincipGeiseenvoudig:AWKxscantopeenpatroGon,envoGoriederovereenkomendpatroGonU zaleenactiewordenuitgevoGerd.ؼW*ederomU hebikeendummy-bGestandaangemaaktmetdevolgenderegels:"test123testtte}/esstt">r$awkN'/test/{print}'/tmp/dummy =ؼtest123testHet=patroGonwaarAWKnaarzoekt,kis'test'endeactiediehetuitvoertwanneerheteenregelinhetbestand /tmp/dummyU metdestring'test'vindt,is`print'._2 ~?G11.8T abQelleny16ՁV>r$awkN'/test/{i=i+1}END{printi}'/tmp/dummy =ؼ3ؼW*anneerjenaarmeerpatronenzoGekt,kunjedeteksttussendeaanhalingstekensbetervervqangendoor'-f le.awk'U zoGdatjeallepatronenenactiesinhetbestand'le.awk'kuntplaatsen.grepU (drukregelsafovereenkomendU meteenzoGekpatroon)W*evhebbGenindevorigehoofdstukreedsheelwatgrepopdrachtenvgezien, diederegelslatenziendiemeteenU patroGonovereenkomen.qMaarU grepkqanmeer.卑>r$grepN"zoeknaardit"/var/log/messages-c =ؼ12DeU string"zoGeknaardits12keerinhetbestand/vqar/log/messagesgevonden.[ok,U ditvoGorbeeldU wasnep,hetbGestand/vqar/log/messageswasaangepast:-)]w>cU (teltregels,woGordenenbytes)In.hetvolgendevoGorbeeld,e.zien.wedatdeuitvoGerniethetgeeniswatweervqanverwachtte.nHetdummybGestand,U zoalsinditvoorbeeldgebruikt,bevqatdevolgendetekst:q"b}/ashintroductionuhowtotestle"卑>r$wcN--words--lines--bytes/tmp/dummy =ؼ2U 534/tmp/dummyDe0dvolgordevqandeparametersdoGetervoGorwcniettoGe.eBW*cdruktzealtijdindestandaardvolgordeaf,7duszoalsU jekuntzien:q<lename>.sortU (sorteerregelsvqantekstbGestanden)DitmaalU bGevqathetdummybestanddevolgendetekst:"bca"卑>r$sortN/tmp/dummy =ؼZoU zietdeuitvoGererongeveeruit:abcOpGdrachtenU zoudennietzoeenvoudigU moetenzijn:-)bQc(eencalculatorprogrammeertaal)MetBckunnenbGerekeningenvqanafdeopdrachtregelwordengemaakt(invoGervqanuiteenbGestand,ͮnietviaomleidingofeenpipGemaarwelvqanuiteengebruikersinterface.) 5HetvolgendedemonstreerteenaantalopGdrachten.qMerkU opdatikgebruikmaakvqandeparameter-qomeenwelkomstberichtU tevoorkomen.Ԡ_2 ~?G11.8T abQelleny17ՁV'+$bcN-q =ؼ1==5ؼ00.05==0.0515!=5028256sqrt(9)3while(i!=9)fi=i+1;printig123456789quittputU (initialiseereenterminalofondervraageenterminfodatabase)EenU kleinedemonstratievqandemogelijkhedenvantput:卑>r$tputNcup104ؼDeU promptverschijntU op(y10,x4).>r$tputNresetؼMaakU hetschermschoGonendepromptverschijntop(y1,x1).qMerkopdat(y0,x0)delinkerbGovenhoekU is.>r$tputNcolsؼ80ؼT*oGontU hetaantalmogelijketekensinrichtingx.HetiszeeraantebGevelen(opz'nminst)metdezeprogramma'sbekendtezijn.3Erzijnheelveelvqandeze kleineU programma'sdiejeechteU magieopdeopGdrachtregelU latendoen.[eenU aantalvoGorbeeldenU zijnovergenomenuitdemanpagesofFAQ's]_2 ~?G12.8MeerScriptssH۹18ՁV12%MeerG\Scripts荍12.1)`Eenop_drachtto_epassenvo_orallebestandenineendirectory.X12.2)`Vo_orbeeld:Eenzeereenvoudigbackupscript(ietsb_eter)+Q#!/bin/bash =QSRCD="/home/"QTGTD="/var/backups/"QOF=home-$(dateN+%Y%m%d).tgzQtarN-cZf$TGTD$OF$SRCD#Í12.3)`Bestandsherno_emerVh#!/bin/shVh#Nrenna:hernoemmeerderebestandenopbasisvanverscheideneVh#Nregelsgeschrevendoorfelixhudsonjan-2000Vh#Ncontroleerditbestandeerstopdediverse'modes'Vh#Nalsdeeerste($1)voorwaardeovereenkomtdanvoerenwedatVh#NdeelvanhetprogrammauitenstoppenVh#NcontroleeropdeprefixvoorwaardeVhifN[$1=p];thenVh#Nnuontdoenweonsvandemode($1)variabeleenprefix($2)_۔prefix=$2N;shift;shiftVh#NeensnellecontroleoferbestandenwerdenopgegevenVh#NalsditnietzoisdankunnenwemaarbeternietsdoendaneenVh#Neenaantalnietbestaandebestandentehernoemen!!_۔ifN[$1=];thenn~echoN"geenbestandenopgegeven"n~exitN0_۔fiVh#NdezeforloopverwerktallebestandendieweaanhetprogrammaVh#NopgavenVh#Nhethernoemtperopgegevennaam_۔forNfilein$*iN0doiN0mvN${file}$prefix$file_۔doneVh#Nweverlatennuhetprogramma_۔exitN0VhfiVh#NcontroleophethernoemenvaneensuffixVh#NderestvanditgedeelteisvrijwelgelijkaandevorigesectieVh#NkijkalsjeblieftindienotitiesY_2 ~?G12.8MeerScriptssH۹19ՁVVhifN[$1=s];then =_۔suffix=$2N;shift;shiftdifN[$1=];theniN0echoN"geenbestandenopgegeven"dexitN0dfi["FforNfilein$*_۔dodmvN${file}$file$suffix["Fdone["FexitN0VhfiVh#NcontroleeropdereplacementhernoemingVhifN[$1=r];then_۔shiftVh#NiknamdezeopuitvoorzorgdatergeenbestandenbeschadigdVh#NrakenalsdegebruikernietsopgeeftVh#Nslechtseenveiligheidsmaatregel_۔ifN[$#-lt3];theniN0echoN"usage:rennar[expression][replacement]files..."iN0exitN0_۔fiVh#Nverwijderandereinformatie_۔OLD=$1N;NEW=$2;shift;shiftVh#NdezeforloopverwerktallebestandendieweaanhetprogrammaVh#Nopgaven,hethernoemtnbestandtegelijkertijdVh#Ndoorgebruiktemakenvanhetprogramma'sed'Vh#NditiseeneenvoudigopdrachtregelprogrammadatstandaardinvoerVh#NverwerkteneenexpressievervangtdooreenopgegevenstringVh#Nhiergevenwehetdebestandsnaamdoor(alsstandaardinvoer)enVh#Nvervangendenodigetekst_۔forNfilein$*_۔doiN0new=`echoN${file}|seds/${OLD}/${NEW}/g`iN0mvN${file}$new_۔doneVhexitN0VhfiVh#NalswehierzijnaangekomendatwildatzeggendatnietsVh#Nzinnigsaanhetprogrammawerddoorgegeven,dusvertellenVh#NwedegebruikerhoehettegebruikenVhechoN"Gebruik;"VhechoN"rennap[prefix]files.."VhechoN"rennas[suffix]files.."M_2 ~?G13.8W anneererietsnietgoQedgaat(debuggen)^20ՁVVhechoN"rennar[expression][replacement]files.." =VhexitN0Vh#Ndone!#Í12.4)`Bestandsherno_emer(eenvoudig)+0#!/bin/bash0#Nrenames.sh0#Nbasisbestandshernoemer0criteria=$10re_match=$20replace=$30forNiin$(ls*$criteria*);0doCsrc=$iCtgt=$(echoN$i|sed-e"s/$re_match/$replace/")CmvN$src$tgt0done(13%W(anneerG\erietsnietgopedgaat(debuggen)荍13.1)`ManierenomBASHaantero_epenMAardigU omtedoGenishetvolgendeopdeeersteregeltoetevoegen卑H=#!/bin/bashN-xؼHierdoGorU zalwatinteressanteuitvoGerwordengeproGduceerd14%OvcerG\hetdopcument:GeefVmegerustjeaanbGevelingen/correcties,ofVwatjedanoGokinteressantvindtominditdoGcumentterugte vinden.qIkU zalhetzospGoedigU mogelijkbijwerken.#Í14.1%}(geen)garantieMDitU doGcumentwordtzonderenigegarantiegeleverd.14.2%}VertalingenItaliaans:qdoGorU WilliamGhel(wizzyattiscalinet.it)ishierؼF*rans:qdoGorU LaurentMartelliontbr}/eekt_2 ~?G14.8Ov>erhetdoQcumentRz21ՁVKoreaans:qMinseokU Parkhttp://kldp.or}/gؼKoreaans:qChunU HyeJinunknownSpaans:qonbGekendU http://www.insug.or}/gIk3denkdatermeervertalingenzijn,:maarhebdaargeeninformatieover,:mailhetalsjeblieftnaarmealsje hierU informatieoverU hebt,zoGdatikdezesectiekqanbijwerken.#Í14.3%}Metdankaan#MensenU dieditdoGcumentnaaranderetalenvertaalde(vorigesectie).NathanU HurstvoGorhetopsturenvqanheelwatcorrecties.JonAbbGottvoorhetopsturenvqanopmerkingenoverhetberekenenvqandewaardevqanrekenkundigeexpressies.F*elixU HudsonvoGorhetschrijvenvqanhetr}/ennauscriptKeesvqandenBroGek(voorhetopsturenvqandevelecorrecties,`hetherschrijvenvqandesectiehandigeopGdrachten)MikeU (pink)deedeenaantalsuggestiesbGetrefthetlokqaliserenvanbashenhettestenvanbGestandenFieshU deedeenaardigesuggestieoverU desectieloGopsLionraaddeaanmeldingtemakenvqaneengebruikelijkefoutmelding(./hello.sh: Commandnotfound).AndreasU BeckvoGorverscheidenecorrectiesenopmerkingen#Í14.4%}HistorieMNieuweU vertalingenopgenomenenkleinecorrectiesaangebracht.ؼDeU sectiehandigeopGdrachtenU herschrevendoGorKees.MeerU correctiesensuggestiesopgenomen.V*oGorbeeldenU toegevoegdoverhetvergelijkenvqanstrings.v0.8U deversiegedropt,ikdenkdatdedatumvoldoGendeis.v0.7U MeercorrectieseneenaantaloudeTO-DOsectiesgeschreven.v0.6U Kleinecorrecties.v0.5U DesectieoverU omleidingtoGegevoegd.v0.4e%verdweenvqanzijnlokatievanwegenmijnex-baasenditdoGcumentvondeennieuweplaatsopdejuisteurl:qwww.linuxdoGc.org.voGorgaand:qIkU weethetnietmeerenmaaktegeengebruikvqanrcsofcvs:(#Í14.5%}MeerbronnenMIntroGductieU bash(onderBE)http://or}/g.laol.net/lamug/beforever/bashtut.htmBourneU ShellProgramminghttp://207.213.123.70/bGook/;_2GqL ectt0900HЃ ecti1000!N ecbx1200]f ecbx1000&Lt$ffffecbx14406 ecss1000qL ectt1000Iqqecss2074 1 ecrm1000 !", cmsy10 b> cmmi10