; TeX output 2003.11.26:1325_2 ~?ՁZݺIqqecss2074BASHfProgramming-IntroductionHOwmWTO cG 1 ecrm1000diU MikeGqL ectt1000mikkey@dynamo.com.arLuned17Luglio11:47:00AR*T2000&6 ecss1000QuestoarticolosipropGonediaiutartiadiniziareaprogrammarescriptdishelldilivellobase-intermedio.%NonvuoleEessereundoGcumentoavanzato(vediiltitolo).IoNON*sonounespertooungurudellaprogrammazionedella>shell.^HodecisodiscriverequestoHOWTO0pGerchimparermoltoepGotrebbe>essereutileadaltrepGersone.QualsiasitipGodiriscontrosarapprezzato,âspGecialmenteseinformadipatch:)"P.zT*raduzionedi8 ecsi1000WilliamGhela.k.a.qWizU ofId,Mercoled19Luglio2000.(&Lt$ffffecbx1440Indice]f ecbx10001In>troQduzione3ؼ1.1%OttenereU l'ultimaversione.荍.....................................w31.2%Requisiti‹.荍..............................................w31.3%UsiU diquestodoGcumento !.荍.....................................w31.4%T*raduzioni_K.荍.............................................w31.5%NoteU sullatraduzioneۍ.荍........................................w42Scriptmoltofacilift42.1%IlU tradizionalescripthelloworldS.荍.................................w42.2%UnoU scriptdibackupmoltosempliceK.荍...............................w43T uttosullaredirezioneO43.1%T*eoriaU eriferimentoveloGce (㍍.荍....................................w43.2%Esempio:qstdoutU versole.荍.....................................w53.3%Esempio:qstderrU versolew.荍.....................................w53.4%Esempio:qstdoutU versostderr.荍...................................w53.5%Esempio:qstderrU versostdout.荍...................................w53.6%Esempio:qstderrU estdoutversole.荍................................w64LepipQeo64.1%CheU cosasonoepGerchvorraiutilizzarleyo.荍.............................w64.2%Esempio:qsempliceU pipGeconsed TS.荍.................................w64.3%Esempio:qunaU alternativqaals-l*.txt .荍..............................w65V ariabili3y65.1%Esempio:qHelloU W*orld!usandolevqariabili򓍍.荍............................w75.2%Esempio:qUnoU scriptdibackupmoltosemplice(unpGocoU migliore).荍..............w75.3%V*ariabiliU loGcaliC{.荍...........................................w7*_2 ~?GINDICE]!2ՁV6Condizionali7ؼ6.1%PuraU T*eoria ۍ.荍............................................w86.2%Esempio:qEsempioU basilaredicondizionaleif..thenIs.荍......................w86.3%Esempio:qEsempioU basilaredicondizionaleif..then...else+.荍..................w86.4%Esempio:qCondizionaliU convqariabili.荍...............................w87Ciclifor,whileeun>tilR97.1%PerU esempio f.荍............................................w97.2%F*orU simil-C;ߍ.荍.............................................w97.3%EsempioU diwhile .荍..........................................w97.4%EsempioU diuntil덍.荍..........................................x?108F unzioni108.1%EsempioU difunzioniۍ.荍........................................x?108.2%EsempioU difunzioniconparametric#.荍................................x?109In>terfacceutentee`119.1%UtilizzoU diselectpGerlacreazionedisemplicimenύ.荍.......................x?119.2%UsareU larigadicomando.荍.....................................x?1110V arie{1210.1%LeggereU l'inputdell'utenteconreadÍ.荍...............................x?1210.2%V*alutazioneU aritmetica .荍......................................x?1210.3%T*rovqareU bash.荍............................................x?1210.4%PrendereU ilvqalorediritornodaunprogrammaW.荍.........................x?1310.5%CatturareU l'outputdiunprogrammaO.荍...............................x?1310.6%FileU asorgentimultipli .荍......................................x?1311T a>vole1411.1%OpGeratoriU diconfrontotrastringhe .荍...............................x?1411.2%EsempiU diconfrontotrastringhe"ύ.荍.................................x?1411.3%OpGeratoriU aritmetici.荍........................................x?1411.4%OpGeratoriU aritmeticirelazionali.荍..................................x?1511.5%ComandiU utili X.荍...........................................x?1512AltriScript1812.1%ApplicareU uncomandoatuttiileinunadirectory*.ˍ.荍......................x?1812.2%Esempio:qUnoU scriptdibackupmoltosemplice(ancoraunpGocoU migliore)b'.荍..........x?1812.3%RinominatoreU dileٯ.荍........................................x?18$I_2 ~?G1.8In>troQduzione~3ՁV12.4%RinominatoreU dile(semplice)Ǎ.荍..................................x?2013Quandoqualcosav\|amale(debugging)820ؼ13.1%MoGdiU dichiamareBASH w.荍.....................................x?2014InformazionisuldoQcumen>to.2014.1%(no)U warranty Jg.荍...........................................x?2014.2%T*raduzioni_K.荍.............................................x?2114.3%GrazieU a .荍..............................................x?2114.4%History{;.荍...............................................x?2114.5%AltreU risorse QK.荍............................................x?21(1Inctropduzione荍!N ecbx12001.1Ottenerel'ultimaversioneMHЃ ecti1000http://www.linuxdo}/c.org/HOWTO/Bash-Prog-Intro-HOWTO.htmlInitalianohttp://www.pluto.linux.it/ildp/HOWTO/Bash-Pr}/og-Intro-HOWTO.html#Í1.2RequisitiF*amiliarit?conlarigadicomandoGNU/Linuxeconiconcettidibasedellaprogrammazione,saranno d'aiuto.aNonostante&3questanonsiaunaintroGduzioneallaprogrammazione,/spiega(oalmenociprovqa)molticoncettiU dibase.1.3Usidiquestodo_cumentoMQuestoU doGcumentovuolessereutileneiseguenticasiؼ !", cmsy10HaiU un'infarinaturadiprogrammazioneevuoiiniziareascriverequalchescriptdishell.HaiU unavqagaideadellaprogrammazionedellashelledesideriunqualchetipGodiriferimento.V*uoiU vederequalchescriptdishelledalcunicommentipGercominciareascrivernedituoi.StaiU passandodaDOS/Windows(ol'haigifatto)evuoiprepararedeiproGcessibatch.SeiU unnerdtotale(completenerd,ndt)eleggiognihow-todispGonibile.1.4TraduzioniMKoreano:qChunU HyeJinsc}/onosciutoؼC'erano/altretraduzioni,7EmanonlehoinclusepGerchnonavevoalcunURL/versocuipuntarle.eSequalcuno diU voineconoscesse,pregatodiinviarmeliviaemail.O_2 ~?G2.8Scriptmoltofacilidc4ՁV1.5NotesullatraduzioneMNelwcasovivenissel'idea(ottima,n:-)diinviarmicorrezioniinformatodi,nvisareigratosepGercrearle utilizzaste3ilcomandodi& -uve}/cchio.sgml& nuovo_e_corretto.sgmlw;Cquesto3pGerchlamiadabbenagginemiimpGedisce1diimparareadestreggiarmicondichenonsianostaticreaticonl'opzione-u.Grazieebuonalettura!(2ScriptG\moltofacili:QuestoHOW-TOtenterdidartialcuniconsiglisullaprogrammazionedellashellbasandosiprincipalmentesuU esempi.ؼInF(questasezionetroveraiF(qualchepiccoloscriptchesispGeratisiad'aiutopercomprenderealcunetecniche.#Í2.1Iltradizionalescripthelloworld+H=qL ectt0900#!/bin/bash =H=echoNHelloWorldؼQuesto[scripthasolamenteduerighe.[LaprimaindicaalsistemaqualeprogrammautilizzarepGereseguireil le.LaU secondarigal'unicaazionecompiutadalloscript,chestampa'HelloW*orld'sulterminale.Seq0ottieniqualcosacome./hello.sh:Commandnotfound.űProbabilmenteq0laprimariga'#!/bin/bash'莡errata,U controlladovesitrovqabashovedi'trovqarebash'pGersaperecomedovrestimodicaretaleriga.#Í2.2Unoscriptdibackupmoltosemplice+>r#!/bin/bash =>rtarN-cZf/var/my-backup.tgz/home/me/ؼInquestoscript,Iinvecedistampareunmessaggiosulterminale,creiamounatar-ball(archiviotar)della homedirectorydiunutente.QuestoNONpGensatoperessereusato,ֺunoscriptdibackuppiutilesarpresentatoU piavqantiinquestodoGcumento.(3T(uttoG\sullaredirezione荍3.1Teoriaeriferimentovelo_ceMEsistonoU 3descrittoridile:qstdin,stdoutestderr(std=standard).BasilarmenteU tupuoi:ؼ 9b1.redirigereU stdoutversounle 9b2.redirigereU stderrversounle 9b3.redirigereU stdoutversostderrdg_2 ~?G3.8T uttosullaredirezioneL%5ՁV 9b4.redirigereU stderrversostdout 9b5.redirigereU stderrestdoutversounle 9b6.redirigereU stderrestdoutversostdout 9b7.redirigereU stderrestdoutversostderr1U 'rappresenta'stdoute2stderr.ؼUnapiccolanotapGervederequestecose:conilcomandolesspuoivisualizzaresiastdout(cheresternel buer)3chelostderrcheverrstampatosulloschermo,jmaeliminatononappGenatenteraidi'sfogliare'ilbuer."ލ3.2Esempio:stdoutversoleMQuestoU farschel'outputdiunprogrammavengascrittosuunle.>rlsN-l>ls-l.txt =Qui,(unflechiamato'ls-l.txt'verrcreatoeconterrcichevedrestisulloschermodigitandoilcomando'ls-l'U edeseguendolo."ލ3.3Esempio:stderrversoleMQuestoU farschel'outputdistderrdiunprogrammavengascrittosuunle.>rgrepNda*2>grep-errors.txt =Qui,͓unOlechiamato'grep-errors.txt'sarcreatoeconterrcichevedresticomepGorzionedistderrdell'outputU delcomando'grepda*'."ލ3.4Esempio:stdoutversostderrMQuestoU farschel'outputdistderrdiunprogrammavengascrittosulmedesimoledescriptordistdout.>rgrepNda*1>&2 =Qui,U lapGorzionedistdoutdelcomandoinviataastderr,puoiaccorgerteneindiversimoGdi.3.5Esempio:stderrversostdoutMQuestoU farschel'outputdistderrdiunprogrammavengascrittosulmedesimoledescriptordistdout.>rgrepN*2>&1 =Qui,L_lapGorzionedistderrdelcomandoinviataastdout,sefaiunapipGeversoless,noteraicherighele qualinormalmente'scomparirebbGero'(poichsonoscrittesustderr)oravengonotenute(pGerchsitrovqanosuU stdout).m_2 ~?G4.8LepipQeL+6ՁV3.6Esempio:stderrestdoutversoleMQuestoD&pGorterognioutputdiunprogrammasuunle.kPurisultareavolteutilepercron,Gsevuoicheun comandoU passiinassolutosilenzio.卑>rrmN-f$(find/-namecore)&>/dev/null =ؼQuestoO(pGensandoacron)eliminerognilechiamato'core'inqualsiasidirectory*.aOsservqachedovrestiessereU piuttostosicurodicosastafacendouncomando,primadieliminarneognioutput.(4LeG\pippe:Questa};sezionemostrainmanieramoltosempliceepraticacomeusarelepipGe,BeperqualemotivopotrestivolerloU fare.#Í4.1Checosasonoep_erchvorraiutilizzarleLeU pipGetipermettonodiusare(moltosemplice,insisto)l'outputdiunprogrammacomeinputdiunaltro.4.2Esempio:semplicepip_econsedQuestoU unmoGdomoltosemplicediusarelepipe.卑>rlsN-l|sed-e"s/[aeio]/u/g" =ؼQui,usuccedequesto:(nprimaeseguitoilcomandols,edilsuooutput,invecediesserestampato,inviato (mandatoU inpipGe)alprogrammased,cheasuavolta,stampaquellochehadastampare.4.3Esempio:unaalternativ@ aals-l*.txtProbabilmente,Tquesto!ǀilmoGdopidicileperfarels-l*.txt,Tmaquaperillustrarelepipe,Tnonper risolvereU untaledilemmadielencazione.卑>rlsN-l|grep"\.txt$" =ؼQui,ǵl'output}delprogrammals-linviatoalprogrammagrep,che,asuavolta,stampGerlerighechecorrispGondonoU allaregexn.txt$.(5V(ariabili:Puoicusarelevqariabilicomeinognilinguaggiodiprogrammazione.kNonesistonotipididati.UnavqariabilenellaU bashpucontenereunnumero,uncarattere,unastringadicaratteri.ؼNonZhaibisognodidichiarareunavqariabile,\1ilsoloattodiassegnareunvalorealsuoriferimentofarschevengaU creata.v_2 ~?G6.8Condizionalio7ՁV5.1Esempio:HelloWorld!usandolev@ ariabili+Q#!/bin/bash =QSTR="HelloNWorld!"QechoN$STRؼLaeriga2creaunavqariabilechiamataSTRQeleassegnalastringaHelloW*orld!.SNPoiilVALOREQdiquesta vqariabileI%recupGeratoinserendoilsimbolo'$'all'inizio(delriferimento,Kndt).mOsservqa(provqaci!)mchesenonusiSilsegno'$',T%l'outputdelprogrammasardierente,eprobabilmentenonquellocheavrestivolutofosse.#Í5.2Esempio:Unoscriptdibackupmoltosemplice(unp_ocomigliore)L\#!/bin/bash =L\OF=/var/my-backup-$(dateN+%Y%m%d).tgzL\tarN-cZf$OF/home/me/ؼQuesto SscriptintroGduceun'altracosa.X cmmi10<1'unaespressionechehavqaloreU falso,mentre'2>1'havalorevero.ؼLecondizionalihannoaltreformecome:ifespr}/essioneR thenistruzione1elseistruzione2Z.'YQui'istruzione'U eseguitase'espressione'vera,altrimentivieneeseguita'istruzione2'.AncoraQun'altraformadi(espressione,Rndt)condizionale:oifespr}/essione1thenistruzione1elsemifespr}/es-sione2thenk,istruzione2elseistruzione3Z.#InquestaformastatoaggiuntosolamenteELSEjIF'espressioGen2'THENE'istruzione2'Echefaeseguireistruzione2seespressione2vqalevero.lsIlrestocometipuoiimmaginare(vediU leformeprecedenti).UnaU parolasullasintassi:LaU basepGericostrutti'if'nellabashquesta:ifU [espressione];thencoGdiceU eseguitose'espressione'vera.#Í6.2Esempio:Esempiobasilaredicondizionaleif..then+Q#!/bin/bash =QifN["foo"="foo"];then_۔echoNexpressionevaluatedastrueQfiؼIlcoGdicedaeseguiresel'espressionetraparentesiquadreveraputrovqarsisolamentedopGolaparola'then' eU primadel''cheindicalanedelcoGdiceeseguitosottocondizione.6.3Esempio:Esempiobasilaredicondizionaleif..then...else+Q#!/bin/bashQifN["foo"="foo"];then_۔echoNexpressionevaluatedastrueQelse_۔echoNexpressionevaluatedasfalseQfi6.4Esempio:Condizionaliconv@ ariabili+Q#!/bin/bashQT1="foo"QT2="bar"QifN["$T1"="$T2"];thendechoNexpressionevaluatedastrueQelsedechoNexpressionevaluatedasfalse S_2 ~?G7.8Ciclifor,whileeun>tilPm+9ՁVQfi =(7CicliG\for,whileeunctil:InU questasezionetroveraiU ciclifor,whileeuntil.ؼIlcicloforleggermentediversodaquellodeglialtrilinguaggidiprogrammazione.*KBasilarmente,9tipGermette un'iterazioneU suunaseriedi'parole'inunastringa.Il>whileesegueunapGorzionedicodicesel'espressionedicontrollovera,BesifermaesclusivqamentequandoU falsa(ovieneraggiuntaun'interruzioneesplicitaall'internodelcoGdiceeseguito).Ilrcicloun>tilall'incircaugualealciclowhile,FsolocheilcoGdiceeseguitonchl'espressionedicontrollohaU vqalorefalso.SeU haiilsospGettochewhileeuntilsianomoltosimilihairagione.#Í7.1Peresempio+>r#!/bin/bash =>rforNiin$(ls);doQechoNitem:$i>rdoneؼSullaU secondariga,dichiariamoicomelavqariabilecheprenderidierentivqaloricontenutiin$(ls).ؼLaU terzarigapGotrebbeU esserepilungasenecessario,ocipGotrebberoU esserepirigheprimadeldone(4).`done'U (4)indicacheilcoGdicechehautilizzatoilvqaloredi$iterminatoe$ipuricevereunnuovovqalore.QuestoHscripthaveramenteHpGocosenso,@maunmodopiutileperutilizzareilcicloforsarebbediusarloperisolareU (tomatch,ndt)solocertilenell'esempioprecedente.#Í7.2Forsimil-CMeshhasuggeritodiaggiungerequestomoGdodieseguireunciclo.2SitrattadiuncicloforpisimilealfordeiU linguaggiC/pGerl...卑>r#!/bin/bash =>rforNiin`seq110`;>rdodechoN$i>rdone#Í7.3Esempiodiwhile+C#!/bin/bashCCOUNTER=0CwhileN[ r$COUNTER-lt10];doVhechoNThecounteris$COUNTERVhletNCOUNTER=COUNTER+1 3_2 ~?G8.8F unzioni0[10ՁVCdone =ؼQuestoU script'emula'labGenconosciutastruttura'for'deilinguaggiC,Pascal,pGerl,etc.#Í7.4Esempiodiuntil+C#!/bin/bashCCOUNTER=20CuntilN[ r$COUNTER-lt10];doVhechoNCOUNTER$COUNTERVhletNCOUNTER-=1Cdone(8F(unzioni:Comeginquasiognilinguaggiodiprogrammazione,,xpuoiutilizzarelefunzionipGerraggruppareporzionidi coGdiceU inmodopilogicooppurepraticareladivinaartedellaricorsione(ricorsivit,ndt).ؼDichiarareU unafunzionegiustoquestionediscriverefunctionmia_funzionefmio_coGdiceg.ChiamareU unafunzionepropriocomechiamareunaltroprogramma,semplicementescriviilsuonome.8.1Esempiodifunzioni+L\#!/bin/bash =L\functionNquit{_۔exitL\}L\functionNhello{_۔echoNHello!L\}L\helloL\quitL\echoNfooؼLerighe2-4contengonolafunzione'quit'. {Lerighe5-7contengonolafunzione'hello'. {Senonsei assolutamenteU sicurodicosafacciaquestoscript,seipregatodiprovqarlo!.ؼOsservqaU chelefunzioninonhannobisognodiesseredichiarateinalcunordineparticolare.LanciandoquestoscriptlonoteraipGerlaprimavolta:Elafunzione'hello'chiamata,pGersecondalafunzione'quit',U eilprogrammanonraggiungemailariga10.#Í8.2Esempiodifunzioniconparametri+d#!/bin/bash =dfunctionNquit{rexitd}dfunctionNe{ _2 ~?G9.8In>terfacceutented11ՁVwzechoN$1 =d}deNHellodeNWorlddquitdechoNfooQuestoscriptpraticamenteidenticoalprecedente.PLadierenzaprincipalelafunzione'e'.T*alefunzione, stampailprimoargomentochericeve.r#!/bin/bash =>rcdN/dada&>/dev/null>rechoNrv:$?>rcdN$(pwd)&>/dev/null>rechoNrv:$?10.5%}Catturarel'outputdiunprogrammaMQuestopiccoloscriptmostratutteletabGelledatuttiidatabase(assumendochetuabbiaMySQLinstalla- to).[Inoltre,considera&lapGossibilitdimodicareilcomando'mysql'peraggiungereunousernameedunapasswordU vqalidi.卑>r#!/bin/bash =>rDBS=`mysqlN-uroot r-e"showdatabases"`>rforNbin$DBS;>rdodmysqlN-uroot-e"showtablesfrom$b">rdone10.6%}FileasorgentimultipliMPuoiU usarepidiunlepGervoltetramiteilcomandosource.ؼ__TO-DO___2 ~?G11.8T a>voleڻ14ՁV11%T(acvole荍11.1%}Op_eratoridiconfrontotrastringheM(1)U s1=s2ؼ(2)U s1!=s2(3)U s1s2(5)U -ns1(6)U -zs1(1)U s1corrispGondeas2(2)U s1noncorrispGondeas2(3)U __TO-DO__(4)U __TO-DO__(5)U s1nonvuota(contieneunoopicaratteri)(6)U s1vuota#A11.2%}EsempidiconfrontotrastringheConfrontareU duestringhe.LP>r#!/bin/bash =>rS1='string'>rS2='String'>rifN[$S1=$S2];>rthendechoN"S1('$S1')isnotequaltoS2('$S2')">rfi>rifN[$S1=$S1];>rthendechoN"S1('$S1')isequaltoS1('$S1')">rfip'RipGortoU quiunanotadaunamail,inviatadaAndreasBeck,inriferimentoall'usodiif[$1=$2] u.ؼNonpropriounabuonaidea,datocheseunatra$S1ed$S2vuota,riceveraiunerroredisintassi. x$1=x$2U oppure$1=$2vqannomeglio.#A11.3%}Op_eratoriaritmetici+-*/%U (restodelladivisione)O_2 ~?G11.8T a>voleڻ15ՁV11.4%}Op_eratoriaritmeticirelazionaliM-ltU (<)ؼ-gtU (>)-leU (<=)-geU (>=)-eqU (==)-neU (!=)IU programmatoriinCdovrebbGerolimitarsiamapparel'operatoreallaparentesicorrispondente.#Í11.5%}ComandiutiliQuestaU sezionestatariscrittadaKees(vediGraziea...)Alcuni=diquesticomandiquasiprevedonocompletilinguaggidiprogrammazione.iPertalicomandisaranno spiegatesoltantolebasi.WPerunadescrizionepidettagliata,ticonsigliounaletturapiapprofonditaallepagineU mandiciascuncomando.ؼsedU (streameditor)SedwJuneditornoninterattivo.InvecewJdialterareunlemuovendowJilcursoresulloschermo,usiunoscript diistruzionidieditingpGersed,piilnomedelledaeditare.1Puoiconsideraresedanchecomeunltro.DiamoU un'oGcchiataadalcuniesempi:卑>r$sedN's/vecchio_testo/testo_che_lo_sostituisce/g'/tmp/dummy =ؼSed7primpiazzalastringa'vecchio_testo'7pconlastringa'testo_che_lo_sostituisce'eleggedalle/tmp/dummy*.EIlFrisultatosarinviatoastdout(normalmentelaconsolle)mapuoiancheaggiungere'>cattura'U allanedellarigaquasopracoschesedinviil'outputalle'cattura'.>r$sedN12,18d/tmp/dummy =ؼSedU mostratuttelerighetrannequelleda12a18.qIlleoriginalenonalteratodaquestocomando.ؼa>wkU (manipGolazionedidatale,recuperaretestoeprocessarlo)Esistono`molteimplementazionidellinguaggiodiprogrammazioneAWKP(gliinterpretipiconosciutisono gawkbdellaGNUb&e'newawk'mawk.) (Ilprincipiosemplice:AWKb&ricercaunmoGdello,eperognicorrispGondenzaU verrcompiutaunaazione.ؼDiU nuovo,hocreatounledummycontenteleseguentirighe:test123testtte}/esstt>r$awkN'/test/{print}'/tmp/dummy =_2 ~?G11.8T a>voleڻ16ՁVtest123ؼtestIlmoGdellocercatodaAWK'test'el'azionechecompiequandotrovqaunariganelle/tmp/dummyconla stringaU 'test''print'(stampa,ndt).卑>r$awkN'/test/{i=i+1}END{printi}'/tmp/dummy =ؼ3Quando}staicercandopidiunmoGdello,sarebbe}megliosesostituissiiltestotraapicicon'-fle.awk'cos쎦daU pGoterinseriretuttiimodellieleazioninelle'le.awk'.grepU (stamparighechecorrispGondonoadunmodellodiricerca)Abbiamogiincontratounpaiodicomandigrepneicapitoliprecedenti,chemostranolerighecorrispGondentiadU unmoGdello.qMagrepsafaredipi.卑>r$grepN"lastocercando"/var/log/messages-c =ؼ12LaU stringalastocercandostatatrovqata12voltenelle/vqar/log/messages.[ok,U questoesempioeraunoscherzo,ille/vqar/log/messageserapreparato:-)]w>cU (contarighe,paroleebyte)Nell'esempioseguente,Hnotiamochel'outputnonquellocheciaspGettavqamo.]Illedummy*,Hcoscome莦usatoU inquestoesempio,contieneilseguentetesto:qb}/ashintroductionuhowtotestle卑>r$wcN--words--lines--bytes/tmp/dummy =ؼ2U 534/tmp/dummyW*c cnonsicuradell'ordinedeiparametri.YWclistampasemprenell'ordinestandard,cioG,come cpuoivedere:.sortU (ordinalerighedeileditesto)QuestaU voltailledummycontieneilseguentetesto:bca卑>r$sortN/tmp/dummy =ؼEccoU comedovrebbGeapparirel'output:abcѠ_2 ~?G11.8T a>voleڻ17ՁVIU comandinondovrebbGeroesserecossemplici:-)ؼbQcU (unlinguaggiodiprogrammazionechefadacalcolatrice)BcWaccettacalcolidallarigadicomando(inputdaunle.CNondaunopGeratorediredirezioneedaunapipe), ma3anchedaunainterfacciautente.fuLaseguentedimostrazionepresentaalcunideicomandi.fuOsservqacheiolancioؼbGcU usandoilparametro-qperevitareunmessaggiodibenvenuto.w'+$bcN-q =N1==500.05==0.0515!=5028256sqrt(9)3while(i!=9)fi=i+1;printig123456789quittputU (inizializzaunterminaleointerrogaildatabasediterminfo)UnaU piccoladimostrazionedellecapacitditput: >r$tputNcup104/IlU promptapparea(y10,x4).>r$tputNreset/PulisceU loschermoeilpromptapparea(y1,x1).qNotache(y0,x0)l'angoloinaltoasinistra.>r$tputNcols/80ؼMostraU ilnumerodicaratteripGossibiliindirezionex.@_2 ~?G12.8AltriScriptyϹ18ՁVȑYvivqamenteYraccomandatodifamiliarizzareconquestiprogrammi(almeno).Cisonotonnellatedipiccoli programmiU chetipGermetterannodifaredelleveremagiedallarigadicomando.ؼ[alcuniU esempisonotrattidapaginemanoFAQ](12%AltriG\Script荍12.1%}Applicareuncomandoatuttiileinunadirectory.X12.2%}Esempio:;UnoJscriptdibackupmoltosemplice(ancoraunp_ocoJmigliore)+Q#!/bin/bash =QSRCD="/home/"QTGTD="/var/backups/"QOF=home-$(dateN+%Y%m%d).tgzQtarN-cZf$TGTD$OF$SRCD#Í12.3%}RinominatoredileVh#!/bin/shVh#Nrenna:renamemultiplefilesaccordingtoseveralrulesVh#NwrittenbyfelixhudsonJan-2000Vh#firstNcheckforthevarious'modes'thatthisprogramhasVh#ifNthefirst($1)conditionmatchesthenweexecutethatportionoftheVh#programNandthenexitVh#NcheckfortheprefixconditionVhifN[$1=p];thenVh#weNnowgetridofthemode($1)variableandprefix($2)_۔prefix=$2N;shift;shiftVh#NaquickchecktoseeifanyfilesweregivenVh#Nifnonethenitsbetternottodoanythingthanrenamesomenon-existentVh#Nfiles!!_۔ifN[$1=];thenn~echoN"nofilesgiven"n~exitN0_۔fiVh#NthisforloopiteratesthroughallofthefilesthatwegavetheprogramVh#Nitdoesonerenameperfilegiven_۔forNfilein$*iN0doiN0mvN${file}$prefix$file_۔doneVh#weNnowexittheprogram_۔exitN0_2 ~?G12.8AltriScriptyϹ19ՁVVhfi =Vh#NcheckforasuffixrenameVh#NtherestofthispartisvirtuallyidenticaltotheprevioussectionVh#NpleaseseethosenotesVhifN[$1=s];then_۔suffix=$2N;shift;shiftdifN[$1=];theniN0echoN"nofilesgiven"dexitN0dfi["FforNfilein$*_۔dodmvN${file}$file$suffix["Fdone["FexitN0VhfiVh#NcheckforthereplacementrenameVhifN[$1=r];then_۔shiftVh#NiincludedthisbitastonotdamageanyfilesiftheuserdoesnotspecifyVh#NanythingtobedoneVh#Njustasafetymeasure_۔ifN[$#-lt3];theniN0echoN"usage:rennar[expression][replacement]files..."iN0exitN0_۔fiVh#Nremoveotherinformation_۔OLD=$1N;NEW=$2;shift;shiftVh#NthisforloopiteratesthroughallofthefilesthatwegivetheprogramVh#Nitdoesonerenameperfilegivenusingtheprogram'sed'Vh#NthisisasinplecommandlineprogramthatparsesstandardinputandVh#NreplacesasetexpressionwithagivestringVh#Nherewepassitthefilename(asstandardinput)andreplacethenessesaryVh#Ntext_۔forNfilein$*_۔doiN0new=`echoN${file}|seds/${OLD}/${NEW}/g`iN0mvN${file}$new_۔doneVhexitN0VhfiVh#NifwehavereachedherethennothingproperwaspassedtotheprogramVh#Nsowetelltheuserhowtouseit_2 ~?G13.8Quandoqualcosav\|amale(debugging)20ՁVVhechoN"usage;" =VhechoN"rennap[prefix]files.."VhechoN"rennas[suffix]files.."VhechoN"rennar[expression][replacement]files.."VhexitN0Vh#Ndone!#Í12.4%}Rinominatoredile(semplice)+0#!/bin/bash0#Nrenames.sh0#Nbasicfilerenamer0criteria=$10re_match=$20replace=$30forNiin$(ls*$criteria*);0doCsrc=$iCtgt=$(echoN$i|sed-e"s/$re_match/$replace/")CmvN$src$tgt0done(13%QuandoG\qualcosavamale(debugging)荍13.1%}Mo_didichiamareBASHMUnaU cosacarinadafarediaggiungereallaprimariga卑H=#!/bin/bashN-xؼCiU proGdurrunpo'diinteressantiU informazionidioutput14%InformazioniG\suldopcumencto:SentitilibGerodiproporresuggerimenti/correzioni,oqualunquecosatupensichepotrebbeessereinteressante vedereU inquestodoGcumento.qIocercherdiaggiornarloalpiprestopGossibile.#Í14.1%}(no)warrantyMThisU doGcumentscomeswithnowarrantyofanykind.qandallthatt_2 ~?G14.8InformazionisuldoQcumen>to'21ՁV14.2%}TraduzioniMItaliano:qaU curadiWillyisher}/eؼF*rancese:qaU curadiLaurentMartelliismisse}/dSonoJconvintocheesistanoaltretraduzioni,;manonnehoalcunanotizia;sevoileavete,;pGerpiacere, mandatemeleU viaemailcosipGotraggiornarequestasezione.#Í14.3%}Graziea#LeU pGersonechehannotradottoquestodocumentoinaltrelingue(sezioneprecedente).NathanU HurstpGeravermiU mandatounsaccodicorrezioni.JonU AbbGottperaverU inviatocommentisullavqalutazionedelleespressioniaritmetiche.F*elixU HudsonpGeraverU scrittoloscriptr}/ennaU.KeesU vqandenBroGek(peraverU inviatomoltecorrezioni,riscrittolasezionedeicomandiutili).MikeU (pink)haavqanzatoqualchesuggerimentosucometrovqarebashetestareile.FieshU haavqanzatounbuonsuggerimentopGerlasezionedeicicli.LionU hasuggeritodimenzionareunerrorecomune(./hello.sh:qCommandnotfound.).AndreasU Beckhafattodiversecorrezioniecommenti.14.4%}HistoryMAggiuntaU lasezionecomandiutiliriscrittadaKess.ؼInclusiU moltisuggerimentiecorrezioni.AggiuntiU esempisulconfrontotrastringhe.v0.8U abbandonatalanumerazionedelleversioni,credocheladatasiaabbastanza.v0.7U AltrecorrezioniealcunevecchieU sezioniTO-DOriscritte.v0.6U Correzioniminori.v0.5U Aggiuntalasezionesullaredirezione.v0.4+ScomparsadallasualoGcazioneacausadelmioex-capoequestodocumentohatrovqatoilsuonuovo pGostoU all'opportunourl:qwww.linuxdoc.org.precedenti:qnonU miricordoenonusavorcsocvs:(14.5%}AltrerisorseMIntroGductionU tobash(underBE)http://or}/g.laol.net/lamug/beforever/bashtut.htmBourneU ShellProgramminghttp://207.213.123.70/bGook/;_2GqL ectt0900HЃ ecti1000!N ecbx1200]f ecbx1000&Lt$ffffecbx14408 ecsi10006 ecss1000qL ectt1000Iqqecss2074 1 ecrm1000 !", cmsy10 b> cmmi10.