LINUX-BG Adres : http://www.linux-bg.org |
Pisane na skriptove za BASH shel : versiia 1.2( chast 4) |
Ot: X_console Publikuvana na: 6-06-2000 Adres na statiiata: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=320090778 |
Tazi statiia e prevedena s razreshenieto na avtora i X_console. Produlzhenie na [ chast 3 ]. AND i OR uslovie_1 && uslovie_2 AND izrazut proveriava purvo nai-liavoto uslovie. Ako uslovieto e viarno se proveriava vtoroto uslovie. Ako i to e viarno se izpulniava ostanalata chast ot koda na skripta. Ako uslovie uslovie_1 ne e viarno(vurne rezultat false), togava uslovie uslovie_2 niama da bude provereno. S drugi dumi: if(ako) uslovie_1 e viarno, AND(i) if(ako) uslovie_2 e viarno, then(togava)... Eto edin primer s AND uslovie: #!/bin/bash Tuk vizhdame, che x i y imat stoinostta, za koiato proveriavame. Promenete stoinosta na x ot x=5 na x=12, sled koeto pusnete otnovo programata i shte se ubedite, che uslovieto ne e izpulneno( vrushta stoinost false). OR izrazut e podoben. Edinstvenata razlika e, che proveriava dali nai-leviiat izraz ne e veren(t.e vrushta rezultat false). Ako tova e izpulneno se proveriava sledvashtiia izraz i po-sledvashtiia: uslovie_1 || uslovie_2 S drugi dumi tova zvuchi taka: if(ako) uslovie_1 e viarno, OR(ili) ako uslovie_2 e viarno, togava... Eto zashto kodut sled tozi usloven operator shte bude izpulnen ako pone edno ot usloviiata e viarno: #!/bin/bash V tozi primer shte se uverite, che edno ot usloviiata e viarno. Smenete stoinostta na promenlivata y i izpulnete otnovo programata. SHTe vidite, che nito edno ot usloviiata ne e viarno. Ako se zamislite, shte vidite, che uslovniiat operator if mozhe da zamesti upotrebata na AND i OR izrazite. Tova stava chrez izpolzvaneto na vlozheni if operatori. "Vlagane na if operatori" oznachava da izpolzvame if operator v tialoto na drug if operator. Mozhete da pravite vlagane i na drugi operatori, a ne samo na if. Eto edin primer s vlozheni ifoperatori, koito zamestvat izpolzvaneto na AND izraz v koda na programata: #!/bin/bash Rezultatut e sushtiiat, kakto i ako izpolzvahme AND izraz. Problemut e, che kodut stava po - trudno chetim i otnema poveche vreme, za da se napishe. Za da se predpazite ot problemi izpolzvaite AND i OR izrazi. Izpolzvane na argumenti xconsole$ foo argument $# shte ima stoinost 1 , zashtoto ima samo edin argument podaden na programata. Ako imate dva argumenta, togava $# shte ima stoinost 2. V dopulnenie stoinostta na vseki argument (nuleviiat argument e vinagi imeto na programa - foo) mozhe da se vzeme kato izpolzvate promenlivite $0 - za imeto na programata v sluchaia foo, $1 za stoinosta na purviiat argument -argument i t.n. Mozhe da imate maksimum 9 takiva promenlivi ot $0 do $9. Neka da vidim tova v deistvie: #!/bin/bash echo "Stojnosta na argumenta e $1" Tazi programa ochakva edin i samo edin argument, za da trugne. Ako ia startirate bez argumenti, ili podadete poveche ot edin argument, programata shte izpechata suobshtenie za tova kak da se izpolzva. V sluchai, che imame samo edin argument shel programata shte otpechata stoinosta na argumenta, koito ste podali. Pripomnete si, che $0 e imeto na programata. Eto zashto tazi spetsialna promenliva se izpolzva v "usage" suobshtenieto. Prenasochvane i PIPING xconsole$ echo "Hello World" "Prenasochvaneto" Vi pozvoliava da suhranite rezultata ot izpulnenieto niakude drugade. V povecheto sluchai tova stava kum fail. Operatorut ">" se izpolzva za prenasochvane na izhoda. Mislete za nego kato za strelka, socheshta kude da otide rezultata. Eto edin primer za prenasochvane na izhoda kum fail: xconsole$ echo "Hello World" > foo.file Tuk rezultatut ot komandata echo "Hello World" e prenasochen kum fail s ime foo.file. Kogato prochetete sudurzhanieto na faila shte vidite tam rezultata. Ima edin problem, kogato izpolzvate operatora ">". Ako imate fail sus sushtoto ime, to negovoto sudurzhanie niama da bude zapazeno, a shte bude iztrito i zamesteno s novoto. Ami ako iskate da dobavite informatsiia vuv faila, bez da iztrivate starata? Togava triabva da izpolzvate operatorut za dobaviane : ">>". Izpolzva se po sushtiia nachin s tazi razlika, che ne iztriva staroto sudurzhanie na faila, a go zapazva i dobavia novoto sudurzhanie nakraia. A sega shte vi zapoznaem s piping. Piping-ut Vi pozvoliava da vzemete rezultata ot izpulnenieto na dadena programa i da go izpolzvate kato vhodni danni za druga programa. Piping stava posredstvom operatora: "|". Zabelezhete, che tova ne e malkata bukvata "L". Tozi operator mozhe da poluchite chrez natiskane na klavisha SHIFT i \. Eto i edin primer za piping: xconsole$ cat /etc/passwd | grep xconsole Tuk chetem tseliia fail /etc/passwd i sled tova rezultatut e podaden za obrabotka na komandata grep, koiato ot svoia strana pretursva teksta za niza xconsole i izpechatva tseliia red, sudurzhasht tozi niz na ekrana. Mozhe da izpolzvate i prenasochvane, za da zapishete krainiia rezultat na fail: xconsole$ cat /etc/passwd | grep xconsole > foo.file Raboti. Failut /etc/passwd e procheten i negovoto sudurzhanie e preturseno ot komandata grep za niza xconsole. Sled koeto krainiiat rezultat e prenasochen kum fail foo.file. SHTe otkriete, che prenasochvane i piping sa mnogo polezni sredstva, kogato pishete Vashite shel programi. Vremenni failove xconsole$ touch hello Eto go i nashiiat vremenen fail. Vrushtane na stoinosti xconsole$ grep "foobar" /etc/passwd Niama nikakuv rezultat ot izpulnenieto. Tova oznachava che grep ne e namerila suvpadenie. No mozhe da napravim programata mnogo po-polezna ako se poiaviava suobshtenie, koeto poiasniava rezultata. Tova e, kogato iskate da proverite stoinosta, koiato se vrushta ot dadena programa. Ima edna spetsialna promenliva, koiato sudurzha krainiia rezultat ot izpulnenieto na programata. Tazi promenliva e $?.Razgledaite sledniia kod: #!/bin/bash Kogato startirame programata, promenlivata "$?" shte prihvane rezultata ot komandata grep. Ako toi e raven na 0, znachi ima suvpadenie i podhodiashto suobshtenie shte obiavi za tova. V protiven sluchai shte izpechata, che niama suvpadeniia. Tova e edin osnoven nachin za poluchavane na rezultata, koito vrushta dadena programa. SHTe otkriete, che dosta chesto shte Vi se nalozhi da znaete stoinostta, koiato vrushta dadena programa, za da produlzhite po-natatuk. Ako sluchaino se chudite kakvo znachi 2>&1, sega shte vi obiasnia . Pod Linux, tezi nomera oboznachavat failovi deskriptori. 0 e za standartniia vhod (primer: klaviatura), 1 e za standartniia izhod (primer: monitor) i 2 e za standartniia izhod na greshkite (primer: monitor). Vsiaka obiknovena informatsiia se izprashta na failov deskriptor 1, i ako ima greshki te se izprashtat na failov deskriptor 2. Ako ne iskate tezi suobshteniia da izlizat prosto mozhete da gi prenasochite kum /dev/null. Zabelezhete, che tova niama da spre izprashtaneto na informatsiiata na standartniia izhod. Naprimer, ako niamate prava da chetete ot direktoriia na drug potrebitel, Vie niama da mozhete da vidite neinoto sudurzhanie: xconsole$ ls /root Kakto vizhdate, suobshtenieto za greshka ne beshe izpechatano. Sushtoto vazhi kakto za drugi programi, taka i za failov deskriptor 1. Ako ne iskate rezultatut ot izpulnenieto na programata da se otpechatva na ekrana, mozhete spokoino da go prenasochite kum /dev/null. Ako ne iskate da vizhdate kakto rezultatut ot izpulnenieto, taka i suobshteniiata za greshka, mozhe da go napravite po sledniia nachin: xconsole$ ls /root > /dev/null 2>&1 Tova oznachava che rezultatut ot programata, kakto i vsiaka greshka, koiato predizvika tazi programa shte budat izprateni na /dev/null, taka che nikoga poveche niama da mozhete da gi vidite. Kakvo triabva da napravite ako iskate Vashiiat shel skript da vrushta stoinost pri zavurshvane na programata? Komandata exit priema samo edin argument - chislo, koeto triabva da se vurne pri zavurshvane na programata. Obiknovno chisloto 0 se izpolzva, za da kazhem, che programata e zavurshila uspeshno, t.e. ne e vuzniknala nikakva greshka po vreme na neinoto izpulnenie. Vsichko po-goliamo ili po-malko ot 0 obiknoveno oboznachava, che e vuzniknala niakakva greshka. Tova go reshavate Vie kato programist. Neka prosledim slednata programa: #!/bin/bash Zaklyuchenie Uspeh! X_console Vizhte [ CHast 1| CHast 2 | CHast 3 | CHast 4 ] << Kirilizirane na Linux | (Ne)sigurnost s Apache Web Server >> |
Avtorite na saita, kakto i tehnite sutrudnitsi zapazvat avtorskite prava vurhu sobstvenite si materiali publikuvani tuk,
no te sa copyleft t.e. mogat svobodno da budat kopirani i razprostraniavani s iziskvaneto izrichno da se upomenava imeto na avtora,
kakto i da se publikuva na vidno miasto, che te sa vzeti ot originalniia im URL-adres na tozi survur (http://www.linux-bg.org). Avtorskite prava na prevodnite materiali prinadlezhat na tehnite avtori. Ako s publikuvaneto tuk na niakakuv material nevolno sa narusheni nechii prava - sled konstatiraneto na tozi fakt materialut shte bude svalen.
All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
|