ot X_console(14-03-2000)

reiting (32)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Tazi statiia e prevedena s razreshenieto na avtora i X_console.
Adresut na originalnata statiia e http://xfactor.itec.yorku.ca/~xconsole/.

Kakto vsichki shelove, koito mozhe da namerite za Linux BASH (Bourne Again SHell) e ne samo otlichen komanden interpretator no i ezik za pisane na kriptove. SHel(Shell) skriptovete vi pozvoliavat maksimalno da izpolzvate vuzmozhnostite na shel interpretatora i da avtomatizirate mnozhestvo zadachi. Mnogo ot programite, koito mozhe da namerite za Linux v posledno vreme sa shel skriptove. Ako iskate da razberete kak te rabotiat ili kak mozhe da gi redaktirate e vazhno da rabirate sintaksisa i semantikata na BASH shela. V dopulnenie poznavaneto na bash ezika vi pozvoliava da napishete vashi sobstveni programi, koito da izpulniavat tochno tova koeto iskate.

Programirane ili pisane na skripove?
Horata koito do sega ne sa se zanimavali s programirane obiknoveno ne razbirat razlikata mezhdu programen i skript ezik. Programnite ezitsi obiknoveno sa po-moshtni i po-burzi ot skript ezitsite. Primeri za programni ezitsi sa C, C++, i Java. Programite koito se pishat na tezi ezitsi obiknoveno zapochvat ot izhoden kod (source code) - tekst koito sudurzha instruktsii za tova kak okonchatelnata programa triabva da raboti sled koeto se kompilirat do izpulnim fail. Tezi izpulnimi failove ne mogat lesno da budat adaptirani za razlichni operatsionni sistemi (OS). Naprimer ako ste napisali programa na C za Linux izpulnimiiat fail niama da trugne pod Windows 98. Za da mozhete da ia izpolzvate tazi programa se nalaga da prekompilirate izhodniia kod pod Windows 98. Skriptovete (programite pisani na skript ezitsi) sushto zapochvat ot izhoden, no ne se kompilirat v izpulnimi failove. Pri tiah se izpolva interpretator koito chete instruktsiite ot izhodniia kod i gi izpulniava. Za zhalost, poradi tova che interpretatora triabva da prochete vsiaka komanda predi da ia izpulni, interpretiranite programi vurviat kato tsialo po-bavno spriamo kompiliranite. Osnovnoto predimstvo na skriptovete se e, che lesno mogat da budat prenapisani za drugi OS stiga da ima interpretator za tazi OS. bash e skript ezik. Toi e idealen za malki programi. Drugi skrip ezitsi sa Perl, Lisp, i Tcl.

Kakvo iskate da znaete?

Pisaneto na sobstveni shel skriptove iziskva ot vas da znaete nai-osnovnite komandi na Linux. Triabva da znaete naprimer kak da kopirate, mestite ili suzdavate novi failove. Edno ot neshtata koeto e zadulzhitelno da znaete e kak da rabotite s tekstov redaktor. Za Linux ima mnozhestvo tekstovi redaktori nai-razprostranenite ot koito sa vi, emacs, pico, mcedit.

Vnimanie!!!
Ne se uprazhniavaite v pisane na skriptove kato root potrebitel! Ne se znae kakvo mozhe da se sluchi! Az niama da buda otgovoren ako vie po nevnimanie povredite viashata sistema. Imaite tova v predvid! Za uprazhneniiata izpolvaite normalen potrebitel bez prava na root.

Vashiiat purvi BASH skript
Purviiat skript koito shte napishete e klasicheskata "Hello World" programa. Tazi programa izpechatva edinstveno dumite "Hello World" na ekrana. Otvorete lyubimiia si tekstov redaktor i napishete:

#!/bin/bash
echo "Hello World"

Purviiat red ot programata kazva che shte izpolzvame bash interpretatora za da podkarame programata. V tozi sluchai bash se namira v /bin direktoriiata. Ako bash se namira v druga direktoriia na vashata sistema togava napravete neobhodimite premeni v purviia red. Izrichnoto spomenavane na tova koi interpretatator shte izpulniava skripta e mnogo vazhno, tui kato toi kazva na Linux kakvi instruktsii mogat da budat izpolzvani v skripta. Sledvashtoto neshto koeto triabva da napravite e da zapishete faila pod imeto hello.sh. Ostava samo da napravite faila izpulnim. Za tselta pishete:

xconsole$ chmod 700 ./hello.sh

Prochetete uputvaneto za izpolzvane na chmod komandata ako ne znaete kak da promeniate pravata na daden fail. Sled kato ste napravili programata izpulnima ia startiraite kato napishete:

xconsole$ ./hello.sh

Rezultatut ot koiato shte bude sledniiat nadpis na ekrana


Hello World

Tova e! Zapomnete posledovatelnosta ot deistviia - pisane na koda, zapisvane na faila s koda, i promenianeto na faila v izpulnim s komandata chmod.

Komandi, Komandi, Komandi
Kakvo tochno napravi vashata purva programa? Tia izpechata dumite "Hello World" na ekrana. No kak programata go napravi tova? S pomoshta na komandi. Edinstveniiat red s komandi beshe echo "Hello World". I koia e komandata? echo.  Komandata echo izpechatva vsichko na ekrana,  koeto e poluchila kato svoi argument.

Argument e vsichko koeto e napisano sled imeto na komandata. V nashiiat sluchai tova e "Hello World". Kogato napishete  ls /home/root,   komandata e ls a neiniiat argiment e /home/root. Kakvo oznachava vsichko tova? Tova oznachava che ako imate programa ili komanda, koiato izpechatva argumentite si na ekrana to mozhe da ia izpolzvate vmesto echo. Neka da predpolozhim che imame takava komanda koiato se kazva foo. Tazi komada shte izpechata svoite argumenti na ekrana. Togava nashiiat skript mozhe da izglezhda taka:

#!/bin/bash
foo "Hello World"

Zapishete go i go napravete izpulnim s chmod sled koeto go startiraite:

xconsole$ ./hello
Hello World

Tochno sushtiiat rezultat. Vsichko koeto pravihte do sega e da izpolzvate echo komandata vuv vashiia shel skript. Druga komanda za izpechatvane e printf. Komandata printf pozvoliava poveche kontrol pri izpechatvane na informatsiiata, osobeno ako ste zapoznati s programniia ezik C. Fakticheski sushiiat rezultat ot nashiiat skript mozhem da postignem prosto ako napishem v komandniia red:

xconsole$ echo "Hello World"
Hello World

Kakto vizhdate mozhe da izpolzvate  Linux komandi pri pisaneto na shel skriptove. Vashiiat bash shel skript e kolektsiia ot razlichni programi, spetsialno napisani zaedno za da izpulniat konkretna zadacha.

Malko po-lesni programi
Sega shte napishem programa s koiato da premestim vsichki failove ot dadena direktoriia v nova direktoriia, sled koeto shte iztriem novata direktoriia zaedno sus neinoto sudurzhanie i shte ia suzdadem otnovo. Tova mozhe da bude napraveno sus slednata posledovatelnost ot komandi:

xconsole$ mkdir trash
xconsole$ mv * trash
xconsole$ rm -rf trash
xconsole$ mkdir trash

Vmesto da pishem posledovatelno tezi komandi mozhem da gi zapishem vuv fail:

#!/bin/bash
mkdir trash
mv * trash
rm -rf trash
mkdir trash
echo "Deleted all files!"

Zapishete faila pod imeto clean.sh. Sled kato startirate clean.sh  toi shte premesti   vsichki failove v direktoriia trash, sled koeto shte iztrie direktoriiata zaedno sus sudurzhanieto i shte ia suzdade otnovo. Dori shte izpechata suobshtenie na ekrana, kogato svurshi sus tezi deistviia. Tozi primer pokazva i kak da avtomatizirate mnogokratnoto pisane na posledovatelnosti ot komandi.

Komentari vuv skripta
Komentarite vi pomagat da napravite vashata programa po-lesna za razbirane. Te ne promeniat nishto v izpulnenieto na samata programa . Te se izpolzvat edinstveno za da mozhe vie da gi chetete. Vsichki komentari v bash zapochvat sus simvola: "#", s izklyuchenie na purviia red (#!/bin/bash). Purviiat red ne e komanda. Vsichki redove sled purviia koito zapochvat sus "#" sa komentari. Vizhte koda na sledniia skript:

#!/bin/bash
# tazi programa broi chislata ot 1 do 10:
for i in 1 2 3 4 5 6 7 8 9 10; do
    echo $i
done

Dori i da ne znaete bash, vie vednaga mozhe da se orientirate kakvo pravi skripta, sled kato prochetete komentara. Dobre e pri pisane na skriptove da izpolzvate komentari. SHTe otkriete, che ako vi se nalozhi da promenite nakoia programa koiato ste pisali predi vreme, komentarite shte vi budat ot goliama polza.

Promenlivi
Promenlivite, nai-obshto kazano, sa  "kutii" koito suhraniavat informatsiia. Vie mozhe da izpolzvate promenlivi za mnogo neshta. Te vi pomagat da suhraniavate informatsiiata koiato e vuvel potrebitelia, argumenti ili chislova informatsiia. Poglednete tozi kod:

#!/bin/bash
x=12
echo "Stoinosta na promenliwata x e $x"

Vsichko koeto se sluchva e da prisvoim na promenlivata x stoinost 12 i da ia otpechatame tazi stoinost s komadata echo. echo "Stoinosta na promenliwata x e $x" izpechatva tekushtata stoinost na x. Kogato davate stoinost na dadena promenliva ne triabva da ima shpatsii mezhdu neia i "=". Eto kakuv e sintaksisa:

ime_na_promenliva=stoinost

Stoinosta na promenlivata mozhem da poluchim kato postavim simvola "$" pred neia.   V konkretniia sluchai za da izpechatame stoinosta na& x   pishem echo $x.

Ima dva tipa promenlivi - lokalni promenlivi i promenlivi na obkruzhenieto(environment). Promenlivite na obkruzhenieto se zadavat ot sistemata i informatsiia za tiah mozhe da se poluchi kato se izpolzva env komandata. Naprimer:

xconsole$ echo $SHELL

SHTe otpechata

/bin/bash

Koeto e imeto na shela koito izpolzvame v momenta.  Promenlivite na obkruzhenieto sa definirani v  /etc/profile~/.bash_profile. S echo komandata mozhete lesno da proverite tekushtata stoinost na dadena promenliva, bilia tia ot obkruzhenieto ili lokalna. Ako vse oshte se chudite zashto sa ni nuzhni promenlivi slednata programa e dobur primer koito ilyustrira tiahnoto izpolzvane:

#!/bin/bash
echo "Stojnosta na x e 12."
echo "Az imam 12 moliwa."
echo "Toj mi kaza che stojnosta na x e 12."
echo "Az sym na 12 godini."
echo "Kak taka stojnosta na x e 12?"

Da predpolozhim che v edin moment reshite da promenite stoinosta na x ot 12 na 8. Kakvo triabva da napravite?  Triabva da premenite navsiaskude v koda 12 s 8. Da no... ima redove v koito 12 ne e stoinosta na x. Triabva li da promeniame i tezi redove? Ne zashtoto te ne sa svurzani s x. Ne e li oburkvashto? Po nadolu e sushtiia primer samo che se izpolzvat promenlivi:

#!/bin/bash
x=12     # stoinosta na promenliwata x e 12 e x
echo "Stoinosta na  x e $x."
echo "Az imam 12 moliwa."
echo "Toj mi kaza che stojnosta na x e $x."
echo "Az sym na 12 godini."
echo "Kak taka stojnosta na x e $x?"

V tozi primer $x shte izpechata tekushtata stoinost na x, koiato e 12. Po tozi nachin ako iskate da promenite stoinosta na x  ot 12 na  8 e neobhodimo edinstveno da zamenite reda v koito pishe x=12 s x=8. Drugite redovete niama da budat promeneni. Promenliviti imat i dugi polezni svoistva kakto shte se ubedite sami v posledstvie.

[ krai na chast 1]

Vizhte [ CHast 1| CHast 2 | CHast 3 | CHast 4]



<< Bezplatni shel akaunti | Kak da instalirame na kompyutura si Linux, Win98 i NT >>