Sunteți pe pagina 1din 6

Sisteme de operare i tehnologii de re ea

Lucrare de laborator nr. 4


Scripturi shell UNIX
Acest laborator are drept scop familiarizarea cu procedurile de scrire i rulare a scripturilor shell-
urilior Unix.
Un script UNIX este un program care poate fi interpretat de ctre shell-ul UNIX al calculatorului
dumneavoastr. El este compus din
comenzi UNIX!
instruc iuni de control!
comentarii.
"rea i un director #A$% &n care ve i depune fi ierele corespunztoare urmtoarelor fi iere de
scripturi UNIX
Noiuni generale
Variabile de mediu
'ariabilele de mediu pot sa con in ca valoare un sir de caractere. Atribuirea de valori se face astfel
variabila=valoare
(n UNIX exista c)teva variabile predefinite.
variabile read-only* actualizate de interpretor
$? - codul returnat de ultima comanda executata
+$ - identificatorul de proces al interpretorului de comenzi
$! - identificatorul ultimului proces lansat &n paralel
$# - numrul de argumente cu care a fost apelat fi ierul de comenzi curent
$0 - con ine numele comenzii executate de interpretor
$1, $2 ... - argumentele cu care a fost apelat fi ierul de comenzi care se afla &n
execu ie
variabile ini ializate la intrarea &n sesiune
$HOME - numele directorului ,home, afectat utilizatorului!
$PATH - cile de cutare a programelor!
$PS1 - prompter-ul pe care &l afi eaz interpretorul atunci c)nd a teapt o
comanda!
$PS2 - al doilea prompter!
$TERM - tipul terminalului pe care se lucreaz.
-
Directive de control (informaii succinte)
.irectivele de control ale interpretorului bash /sau sh) sunt structurile de limba0 care pot fi utilizate
&n scrierea de programe. (n continuare vor fi prezentate c)teva din cele mai folosite structuri de
control.
1entru detalii consulta i pagina de manual a interpretorului de comenzi bash / i2sau sh3* analiza i cu
aten ie directivele i facilit ile pe care acesta le pune la dispozi ie.
Instruc iuni de decizie
Instruc iunea if
if lista1
then lista2
else lista3
fi
if lista1
then lista2
elif lista3
then lista4
else lista5
fi
4 comanda returneaz o valoare la terminarea ei. (n general* dac o comanda s-a terminat cu succes
ea va returna 5* altfel va returna un cod de eroare nenul.
(n prima forma a comenzii if* se executa lista1* iar dac si ultima instruc iune din lista returneaz
codul 5 /succes3 se executa lista2* altfel se executa lista3.
(n a doua forma se pot testa mai multe condi ii c)nd lista1 se termina cu succes* se va executa
lista2* altfel se executa lista3. .ac aceasta se termina cu succes se executa lista4* altfel se executa
lista5.

Instruc iunea case
case cuvant in
tipar13 lista1!!
tipar23 lista2!!
...
esac
Aceasta instruc iune implementeaz decizia multipla. ablonul tipar este o construc ie care poate
con ine simbolurile 6 si 7* similara celor folosite la specificarea generica a numelor de fi iere.
"omanda expandeaz /evalueaz3 irul cuvant i &ncearc sa &l potriveasc pe unul din tipare. 'a fi
executata lista de comenzi pentru care aceasta potrivire poate fi fcut.
Instruc iuni de ciclare

Instruc iunea while
while lista1
! lista2
!ne
8e executa comenzile din lista2 &n mod repetat* cat timp lista de comenzi lista1 se &ncheie cu cod de
9
succes.

Instruc iunea until
"ntil lista1
! lista2
!ne
8e executa comenzile din lista2 in mod repetat* pana c)nd lista de comenzi lista1 se &ncheie cu cod
de succes.

Instruc iunea for
f!# variabila :in val1 val2 ...;
! lista
!ne
8e executa lista de comenzi &n mod repetat* variabila lu)nd pe rand valorile val1, val2, ... .ac
lipse te cuv)ntul cheie in* valorile pe care le va lua pe rand variabila vor fi parametrii din linia de
comanda pe care i-a primit fi ierul de comenzi atunci c)nd a fost lansat &n execu ie.
Alte comenzi
$#ea% - permite ie irea din ciclu &nainte de &ndeplinirea condi iei!
c!ntin"e - permite reluarea ciclului cu urmtoarea iteratie* inainte de terminarea iteratiei
curente!
e&ec cmd - comenzile specificate ca argumente sunt executate de interpretorul de comenzi &n
loc sa se creeze procese separate de execu ie! dac se dore te rularea comenzilor &n procese
separate ele se scriu direct* asa cum se scriu si in linia de comanda
shift - realizeaz deplasarea argumentelor cu o pozi ie la st)nga /+9+-* +<+9 etc3!
wait :pid; - permite sincronizarea unui proces cu sf)r itul procesului cu pid-ul indicat sau cu
sfarsitul tuturor proceselor ,fii,!
e&'# expresie - permite evaluarea unei expresii.
Mersul lucrrii
P#i("l sc#i't )Hell! *!#l+
4rice script trebuie sa &nceap cu linia
#!/bin/bash
1entru a afla adresa bash exact de pe calculatorul .umneavoastr utiliza i instruc iunea =hich
which bash
Aceast linie este utilizat pentru a specifica faptul ca scriptul dumneavoastr trebuie interpretat de
ctre shell-ul bash care se gse te la adresa indicat.
8criptul care permite afi area unui mesa0 de &nt)mpinare >$una ziua ?@ este expus mai 0os
#!/bin/bash
echo Buna ziua !
<
Aai departe este expus procesul prin care se editeaz scriptul shell i se ruleaz
$ cat > BunaZiua.sh
#!/bin/bash
echo Buna ziua !
Ctrl+C
chmod +x BunaZiua.sh
./BunaZiua.sh
Buna ziua !
$
4rice script shell trebuie salvat &ntr-un fi ier cu un nume Nume8cript.sh * extensia este op ional.
Bi ierul trebuie s fie cu drept de executare. Execu ia scriptului se realizeaz cu a0utorul comenzii
$bash calea-catre-scriptul-dumneavoastra
sau $./nume-script
Sc#i't"#i si('le
-. "rea i un script care afi eaz numrul de argumente ce i-au fost transmise i le afi eaz &n
continuare unul c)te unul. (n cazul c)nd nu i-au fost transmise argumente* ea emite mesa0ul
,Nici un argument transmis,. Aodifica i scriptul pentru a afi a argumentele &n ordine
inversa
9. Analiza i scriptul urmtor
#!/bin/bash
((test $1 -lt $2) && (echo '$1 < $2')) || (echo '$2 < $1')
"e face el 6 .up testarea scriptului &nlocui i ghilimelele simple cu ghilimele duble. #ansa i
din nou scriptul. "e a i constatat6 Explica i.
8tudiati codul returnat dup executarea acestui script. Explicati.
Cescrie i scriptul utiliz)nd structura if then else fi
<. ")nd executa i un script* un shell nou demar pentru a executa instruc iunile con inute &n
script. 8a testam aceasta afirma ie cu un exemplu. "rea i un script cu urmtorul con inut
echo PID-ul meu este $$
'ariabila special ++ ne da 1I.-ul procesului. Executa i scriptul de mai multe ori i
compara i rezultatele. "e constata i6 'i se pare normal6 Explica i.
E&e#ci ii
-. Aodifica i scriptul BunaZiua.sh redenumindu-l &n BunaZiuaNume.sh dup cum
urmeaz
a3 dac &i transmite i doua argumente* primul con in)nd numele iar al doilea prenumele* el
trebuie s le afi eze dup salutare /de ex. $una ziua* Nume 1renume3
b3 dac nu-i transmite i nici un argument* el trebuie sa va afi eze dup salutare numele de
conectare al utilizatorului /#4DNAAE3
9. Cealiza i un script shell UNIX care permite >cur area@ ecranului iar apoi afi eaz structura
de fi iere i directoare a directorului pe care l-a i furnizat ca argument. Indica ie comanda
care >cur @ ecranul este clear. 8tudia i pagina de manual a acestei comenzi ?
<. Aodifica i scriptul precedent pentru a afi a structura de fi iere i directoare a dosarului
%
personal al utilizatorului &n cazul c)nd scriptul este lansat fr de argument.
%. Cealiza i un script shell UNIX care calculeaz suma primelor n numere naturale* n fiind
argumentul scriptului.
E. Cealiza i un script shell UNIX care cere utilizatorului sa introduc doua iruri de caractere i
apoi afi eaz un mesa0 de informare dac cele doua iruri sunt sau nu egale. Aai exact* dac
cele doua iruri de caractere sunt egale se afi eaz la terminal un mesa0 de tipul >"ele doua
iruri de caracter sunt egale@* iar dac sunt diferite - un mesa0 de tipul >"ele doua iruri de
caractere sunt diferite@.
F. Cealiza i un script care prime te drept argument calea ctre un director* verifica dac acesta
este un director i &n caz afirmativ afi eaz con inutul acestuia i al subdirectoarelor.
G. Cealiza i un script care permite copierea unui director specificat de ctre utilizator* cu &ntreg
con inutul sau de fi iere i directoare &ntr-un director numit copie.
H. Cealiza i un script shell UNIX care calculeaz suma primelor cinci numere pare* utiliz)nd
un ciclu while.
I. Cealiza i un script care permite afi area denumirii unei luni* &n situa ia &n care utilizatorul
specifica numrul lunii. .e exemplu pentru < afi eaz >martie@.
-5. Cealiza i un script shell UNIX care nu afi eaz dec)t fi ierele dintr-un anumit director
furnizat ca argument.
--. Analog* crea i un script shell UNIX care nu afi eaz dec)t subdirectoarele dintr-un anumit
director furnizat ca argument.
-9. Cealiza i un script shell UNIX care permite afi area numrului de fi iere i de subdirectoare
dintr-un director furnizat drept argument /verifica i pentru &nceput dac directorul exista3. 8e
vor lua &n considerare doua cazuri
a3 cutare superficiala /va limita i doar la directorul curent fr a va preocupa de
subdirectoare3!
b3 cutare &n profunzime /cutare &n toate sub-directoarele din dosarul de baza3
-<. 8crie i un script care afi eaz numrul de utilizatori conecta i i numrul de procese lansate
&n momentul lansrii scriptului.
-%. 8crie i un script care afi eaz numerele de la - p)n la valoarea transmisa scriptului &n
calitate de parametru
a3 Bolosi i &n acest scop o bucl while do done
b3 Cescrie i script-ul folosind structura until do done.
c3 !chimba i script-ul pentru a calcula media tuturor valorilor afi ate anterior.
-E. Cealiza i un script shell UNIX care realizeaz un meniu afi at &n bucla care permite
urmtoarele op iuni
a3 pentru op iunea - afi eaz un mesa0 de &nt)mpinare !
b3 pentru op iunea 9 afi eaz data curenta!
c3 pentru op iunea < afi eaz procesele care ruleaz la acel moment /comanda ps3!
d3 pentru op iunea % va &ntreab numrul procesului care trebuie a fie oprit /,ucide, procesul
trimi ndu-i semnalul 8IDJI##3!
e3 pentru op iunea E >cur a@ ecranul!
f3 pentru op iunea F prse te scriptul!
-F. /op ional3 8crie i un script care consulta pagina =eb ===.Kernel.org i afi eaz versiunea
curenta /mainline3 a nucleului #inux i ultima dat de actualizare / Indica ie utilizatu w"et
pentru a descrca &n prealabil pagina de garda a site-ului3.
Coninutul raportului
Bace i un raport prezent)nd mersul exerci iilor i prezenta i-l pentru validare la sf)r itul lucrrii de
laborator sau &n decurs de o sptm)na dup efectuarea lucrrii /prin e-mail la adresa
victor.moraruLutm.md3. Include i &n fiecare rspuns textul scriptului respectiv. 1une i toate
fi ierele cu scripturi &ntr-o arhiva tar.gz cu numele ume#renume-$ab4.tar."%. Numi i scripturile &n
func ie de numrul exerci iului /de exemplu G.sh pentru exerci iul G* -Eb.sh pentru punctul b al
exerci iului -E* etc.3. Mrimite i arhiva &mpreun cu raportul prin po ta electronic.
E
Referine
1agina de manual bash
Aachtelt Darrels ,$ash Duide for $eginners, http22tldp.org2#.12$ash-$eginners-
Duide2html2index.html
#inux .ocumentation 1ro0ect Duides http22===.tldp.org2guides.html
.iverse surse pe Internet
F

S-ar putea să vă placă și