schell

Upload: alina-iftimiu

Post on 05-Jan-2016

6 views

Category:

Documents


0 download

DESCRIPTION

e un laborator

TRANSCRIPT

  • UNIVERSITATEA DUNAREA DE JOS GALATI SISTEME DE OPERARE IS An II Sem I 2009-2010, PECHEANU

    1/5

    LABORATOR NR. 5 - SISTEME DE OPERARE TEMA LABORATORULUI 1. Limbajul de programare Shell -instructiuni de control 2. Aplicatii 1. INSTRUCTIUNI DE CONTROL 1.1. CICLAREA Limbajul de programare Shell implementeaza ciclarea, adica executarea repetata a unei comenzi (sau secvente de comenzi) , pina la indeplinirea unei conditii. Conditia este testata fie la inceputul ciclului (instructiunea while) sau la sfirsitul ciclului (instructiunea until). Instructiunea while -ciclul cu test initial- are sintaxa: while do (1) done Secventa de instructiuni se va executa pina cind lista de istructiuni intoarce 0, adica succes (adevarat). Se iese din ciclu cu valoarea 1, adica esec (false), intoarsa de . While, do, done, sunt cuvinte cheie care marcheaza elementele structurii. Instructiunea until - ciclul cu test final - are sintaxa: until do (2) done Secventa de instructiuni se va executa pina cind lista de istructiuni intoarce 1, adica esec (fals). Se iese din ciclu cu valoarea 0, adica esec (false), intoarsa de . Until, do, done, sunt cuvinte cheie care marcheaza elementele structurii. Limbajul de programare Shell pune la dispozitie si o instructiune de ciclare cu contor: for [ in , ..] do (3) done Se executa in mod repetat lista> pina cind ia succesiv toate valorile . In cazul in care lipseste lista de valori va lua succesiv valorile parametrilor procedurii. 1.2. SUBSTITUTIA COMENZILOR Atunci cind intr-un program Shell o comanda este incadrata de caracterul ` (accent grav), ea este executata de Shell, iar rezultatul ei va substitui locul comenzii in program.

  • UNIVERSITATEA DUNAREA DE JOS GALATI SISTEME DE OPERARE IS An II Sem I 2009-2010, PECHEANU

    2/5

    Exemplul 1: var1=`date` echo $var1 Variabila var1 va lua ca valoare rezultatul comezii date, adica sirul de caractere care contine data si ora curenta. Substitutia este folosita pentru a construi expresii aritmetice cu variabile Shell. Exemplul 2: contor=1 contor = `expr $contor + 1` Se executa comanda expr, care va calcula valoarea expresiei $contor + 1; valoarea acestei expresii va fi atribuita variabilei contor. Interpretarea comenzilor dintr-un program Shell se face in citeva faze (vezi laboratorul nr. 1, sectiunea 1.4), iar printre fazele premergatoare se afla: - substitutia comenzilor incadrate in accente grave `; - substitutia variabilelor cu valoerea lor; - generarea numelor de fisiere pe baza metacaracterelor *, ? , [...]. Observatie: In cadrul scripturilor Shell se folosesc comenzile in mod curent comezile: test expr evalueaza expresia expr; se poate folosi si [ expr ] (vezi lab 4, 1.1) expr evalueaza (calculeaza) o expresie shift realizeaza deplasarea argum. cu o pozitie la stinga ( $2->$1, $3->$2); break permite iesirea din ciclu inainte de indeplinirea conditiei; continue permite reluarea ciclului cu urmatoarea iteratie, inainte de terminarea iteratiei curente. eval arg argumentele comenzii sunt interpretate ca intrare pentru Shell (ex: cmd=pwd; eval $cmd afiseaza directorul curent). exit n termina executia scrptului Shell, intorcind codul de stare n; daca n lipseste, exit reintoarce codul de strare intors de ultima comanda executata.

  • UNIVERSITATEA DUNAREA DE JOS GALATI SISTEME DE OPERARE IS An II Sem I 2009-2010, PECHEANU

    3/5

    Utilizarea limbajului Shell poate aduce o importanta simplificare a efortului de programare, in cazul unor categorii de probleme cum ar fi: - aplicatii a caror rezolvare implica mai multe operatii care sunt oricum furnizate de diverse comenzi Shell; - aplicatii care manipuleaza date sub forma de linii de text sau chiar fisiere text; - apicatii care implica consultarea directoarelor si parcurgerea arborelui de directoare. Exemplul 3: until test -r fifi do echo Fisierul fifi nu are drept de citire echo Asteptare de 5 secunde sleep 5 done Programul testeaza daca un fisierul fifi permite citirea, si in caz ca nu, asteapta 5 sec si apoi reia ciclul. Exemplul 4: Fie scriptul Shell denumit fifi cu urmatorul continut: contor=$# cmd=echo while test $contor -gt 0 do cmd=$cmd \$$contor contor=`expr $contor - 1` eval $cmd done Acest script afiseaza argumentele cu care el a fost apelat. Sirul \$ pentru caracterul $, folosit la expandarea variabilei $cmd in comanda eval. Variabila $cmd are continutul: echo $contor, unde $contor are pe rind valorile $1, $2, $3, etc, la fiecare pas din ciclu. Exemplul 5: Fie scriptul lili cu urmatorul continut: for var1 do grep $var1 fifi > cici done Scriptul va copia toate liniile continind un sir dat ca parametru, din fisierul fifi in fisierul cici. Lansarea acestui script se face astfel: mars:~$lili gt In fisierul cici se va copia o singura linie din fifi, cea care contine sirul gt.Exemplul 6: Fie scriptul Shell numit gigel care are urmatorul continut: for fisier in *.c echo $fisier

  • UNIVERSITATEA DUNAREA DE JOS GALATI SISTEME DE OPERARE IS An II Sem I 2009-2010, PECHEANU

    4/5

    done In acest script variabila fisier va lua pe rind valorile rezultate din expandarea numelui ambiguu *.c Exemplul 7: Fie scriptul Shell cu urmatorul continut: list= for var1 do list=$var1 $list done echo $list Variabila list va stoca pe rind parametrii de apel. Scriptul va afisa la executie parametrii de apel in ordine inversa. 2. APLICATII I. Sa se studieze paginile de manual ale comenzilor test, read, expr, shift, eval, break continue, exit. II. Sa se rezolve exercitiile urmatoare: 1. Sa se implementeze si sa se testeze exemplele din acest referat de laborator. Sa se arate (acolo unde este cazul) ce este afisat pe ecran in urma executiei fiecarui script, in functie de parametrii transmisi prin linia de comanda. 2. Sa se scrie un script Shell numit fifi care sa contina exemplul 4 din referatul de laborator. Sa se testeze folosind 4 parametri de tip sir de caractere. Sa se modifice acest program astfel incit el sa afiseze la fiecare iteratie numai un singur parametru. 3. Sa se scrie un script shell cu o bucla while infinita (while true), care primeste 5 argumente. Programul sa afiseze argumentele primite, cite unul la o iteratie, apoi sa se opreasca. (Indicatie: while true, continue, exit) 4. Sa se scrie un script Shell care primeste 5 parametri si ii afiseaza in ordinea inversa tastarii lor: ultimul, penultimul, etc. (Indicatie: while true, if, break). 5. Sa se arate care este rezultatul scriptului gigel din exemplul 6. Sa se scrie un script Shell care afiseaza acelasi lucru, dar cu informatii suplimentare: drepturi de acces, lungime, data crearii. Indicatie: vezi si exemplul 4. 6. Sa se creeze mai multe fisiere cu extensia .c (daca nu exsita deja in directorul curent). Sa se scrie un script Shell continind o singura comanda care sa afiseze toate fisierele .c din director (scriptul va avea acelasi efect cu comanda ls -l *.c). Indicatie: man bash, capitolul despre parametri.

  • UNIVERSITATEA DUNAREA DE JOS GALATI SISTEME DE OPERARE IS An II Sem I 2009-2010, PECHEANU

    5/5

    7. Sa se creeze un script Shell care afiseaza numele directoarelor continute de directorul indicat ca argument. Daca nu se indica nici un argument, se vor afisa numele directoarelor continute de directorul curent. Indicatie:if, for, ls -l . 8. Sa se creeze un script Shell care afiseaza directoarele continute de directorul indicat ca argument. Daca nu se indica nici un argument, se vor afisa informatiile despre directoarele continute de cel curent. Indicatie:if, test -d, for, ls -l . 9. Sa se creeze un script Shell care primeste ca parametri numele unui fisier text sursa, doua valori numerice n1 si n2, precum si numele unui fisier text destinatie. Sa se inscrie in fisierul destinatie numai caracterele din fiecare linie a fisierului sursa, care sunt intre pozitiile n1 si n2. Indicatie:for, cut 10. Sa se creeze un script Shell care afiseaza numarul de linii din toate fisierele cu extensia .c din directorul curent. Indicatie: for, wc