laborator -comenzi shell

Upload: alina-iftimiu

Post on 05-Jan-2016

26 views

Category:

Documents


1 download

DESCRIPTION

spor la invatat

TRANSCRIPT

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

    1

    LABORATOR NR. 3 - SISTEME DE OPERARE TEMA LABORATORULUI 1. Fisiere de comenzi indirecte sub UNIX 2. Aplicatii 1. FISIERE DE COMENZI INDIRECTE SUB UNIX 1.1. NOTIUNI INTRODUCTIVE Interpretorul de comenzi (Shell-ul) sistemului de operare UNIX este nu numai un limbaj de comanda, el dispune si de posibilitatea intrepretarii unor elemente specifice limbajelor de programare de nivel inalt, cum ar fi variabile, proceduri sau structuri de control. Aceste elemente specifice unui limbaj de programare, impreuna cu comenzile interpretorului pot utilizate in fisierele de comenzi indirecte, sau script-uri Shell. Comenzile continute intr-un script Shell sunt executate inlantuit (fara interventia utilizatorului) la lansarea in executie a acestuia. Intre diversele sisteme de operare exista mari diferente in ceea ce priveste posibilitatile de utilizarea a limbajului de comanda ca limbaj de programare. La o extrema se situeaza MS-DOS, la care flexibilitatea limbajului este foarte redusa, fisierele de comenzi fiind o de cele ami multe ori insiruire de comenzi elementare. La cealalta extrema, sistemele de operare RSX si VMS ofera un limbaj de comenzi extrem de puternic, cu multiple facilitati. Limbajul interpretorului (interpretoarelor) de comenzi UNIX ofera utilizatorului sufieciente facilitati pentru a realiza script-uri shell cu un grad semnificativ de complexitate. Orice sistem UNIX este livrat cu cel putin doua interpretoare de comenzi; utilizatorul poate sa le foloseasca la alegere atit in lucrul interactiv, cit si in cazul fisierelor de comenzi: - bash, interpretorul de comenzi Bourne; utilizatorul poate folosi in script-uri toate comenzile interpretorului, instructiunile

    uzuale de programare structurata: if, while, case si poate defini subprograme (functii shell); - csh, (sau in Linux tcsh) interpretorul de comenzi C, care este destinat mai ales programatorilor; acesta accepta un limbaj de

    comenzi diferit de bash, comenzile avind o sintaxa apropiata de limbajul C; csh ofera posibilitatea de a folosi variabile structurate (tablouri).

    1.2. EXECUTIA FISIERELOR DE COMENZI Lansarea in executie a unui script Shell poate face prin mai multe metode: 1. prin precizarea directa a fisierului de comenzi: bash nume_fisier_comenzi 2. prin includerea in script-ul Shell in prima linie a sirului: #!/bin/bash 3. prin lansarea in executie directa a fisierului de comenzi: nume_fisier_comenzi In aceste doua ultime cazuri fisierul de comenzi trebuie sa aiba privilegiul de executie, privilegiu care se seteaza cu: chmod a+x nume_fisier_comenzi. 1.3. VARIABILE SHELL In limbajul interpretorului de comenzi se pot defini si utiliza variabile, avind in general ca valori siruri de caractere. Variabilele obisnuite sunt locale instantei interpretorului corespunzatoare unui utilizator. Atribuirea unei valori unei astfel de variabile iar apoi vizualizarea ei se face prin comenzile: nume_variabila = valoare echo $nume_variabila Pentru ca valoarea unei variabile sa fie accesibila proceselor lansate de instanta interpretorului, este necesar ca ea sa fie exportata (inscrisa in mediu). Exportarea se face cu comanda export (vezi laboratorul nr.1): export nume_variabila=valoare Interpretorul de comenzi Shell recunoaste o serie de variabile predefinite. Acestea sunt de doua feluri: 1. variabile read-only pentru utilizator (actualizate doar de interpretor): $? - contine codul de retur al ultimei comenzi executate; $$ - identificatorul de proces al Shell; $! - identificatorul ultimului proces lansat in paralel; $# - contine numarul de argumente pozitionale pentru Shell; $0 - contine numele comenzii executate de shell;

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

    2

    $1, $2,... - contin argumentele pozitionale la apelul unei comenzi Shell. 2. variabile initializate la intrarea in sesiune a utilizatorului:

    $HOME - contine numele directorului de referinta al utilizat. (home directory); $PATH - contine caile de cautare pentru Shell; $PS1 - defineste prompterul asociat Shell (implicit $); $PS2 - defineste al doilea prompter (implicit >) pentru cazul in care o comanda se continua pe o a doua linie; $LOGNAME - contine numele de conectare al utilizatorului; $TERM - contine numele terminalului pe care se lucreaza

    Aceste variabile sunt initializate de catre Shell la deschiderea unei sesiuni utilizator cu valorile precizate in fisierele /etc/profile si $HOME/.profile, constituind mediul (environment) in care se vor executa toate comnzile lansate ulterior de utilizator. La lansarea in executie sub UNIX a unui program, acesta primeste din partea procesului parinte o serie de atribute, informatii si variabile care sunt utilizate pentru a controla: modul de executie, privilegiile, sursa datelor prelucrate si destinatia rezultatelor produse. In linii mari aceste informatii sunt: un numar de identificare al utilizatorului (uid) si un numar de identificare al grupului din care acesta face parte; un numar de fisiere deschise: standard input, standard output, standard error. siruri de caractere de tipul NUME=valoare, care se numesc variabile de mediu; un numar de parametri, dintre care cel putin unul este prezent, reprezentind numele programului care a fost lansat; Exemplu: ls -l *.c -- interpretorul de comenzi va lansa programul executabil ls din /bin iar ls va primi ca parametru 0 chiar numele sau (adica ls), ca parametru 1 optiunea l, ca parametru 2 primul fisier rezultat din expandarea sablonului *.c, etc. 1.4. PROCEDURI SHELL Apelul unei proceduri Shell este identic cu cel al unei comenzi. nume_procedura arg1 arg2 ..... Procedura Shell corespunde unui fisier de comenzi. Parametrii transmisi procedurii sunt identificati prin variabilele predefinite $0 (pentru numele comenzii) si $1, $2, ... pentru parametrii pozitionali. Variabila $# contine numarul acestor parametri. Procedurile Shell se pot apela recursiv. Notiunea de instructiune dintr-un limbaj de programare este inlocuita intr-un fisier de comenzi prin notiunea de comanda. In urma executiei, fiecare comanda furnizeaza un cod de retur, care va fi 0 (adevarat) in cazul executiei corecte sau o valoare diferita de 0 in caz contrar. Exista trei tipuri de comenzi care pot apare in programele Shell: 1. comenzi simple, formate din nume comanda plus argumente; 2. comenzi in "pipe", formate din siruri de comenzi conectate in cascada cu |; 3. liste, care sunt secvente de comenzi simple sau comenzi in pipe separate prin: - ";" sau newline, indicind executia secventiala; - "&&", indicind executia celei de-a doua comenzi doar daca prima returneaza adevarat (executie corecta); - "||", indicind executia celei de-a doua comenzi doar daca prima returneaza fals (executie incorecta); - "&", indicind executia in paralel a comenzilor. Observatie: Interpretorul Shell permite lucrul simultan cu mai multe comenzi (sau fisiere de comenzi). Acestea se pot lansa si executa fie in prim plan (interactiv -foreground) fie in fundal (neinteractiv - background). O comanda care se termina cu caracterul & este lansata in fundal si se va executa in paralel cu o alta care este lansata in continuare. Acest lucru este util in cazul comenzilor a caror executie dureaza mai mult. La terminarea unei astfel de comenzi, interpretorul afiseaza un mesaj informativ. 2. APLICATII I. Sa se studieze informatiile referitoare la comenzile stty, df si sed din manulal on-line II. Sa se rezolve exercitiile urmatoare: 1. Sa se schimbe continutul fisierului de comenzi .bash_profile astfel incit la conectarea pe cont sa se afiseze data calendaristica, caracteristicile terminalului, spatiul liber pe disk si un mesaj de salut. 2. Sa se creeze un script Shell cu cel putin doua comenzi (fara a se folosi un editor de texte). Sa se lanseze in executie prin cele 3 metode aratate la paragraful 1.2.

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

    3

    3. Sa se inlocuiasca cele doua promptere afisate de sistem cu siruri de cel putin doua cuvinte. Sa se gaseasca un exemplu de afisare celor doua promtere.

    4. Sa se efectueze comanda ls -l -a /usr. Sa se afiseze argumentele comenzii (asa cum sunt ele afisate in variabilele corespunzatoare) precum si numarul acestor argumente.

    5. Sa se creeze un fisier text care contine de mai multe ori sirul ".htm" . Sa se scrie un fisier de comenzi indirecte care afiseaza continutul fisierul, apoi modifica toate sirurile ".htm" in ."html" daca acestea sunt la sfarsitul liniei de text si afiseaza din nou continutul acestui fisier. ( se va studia comanda sed si expresiile regulate pentru stabilirea sablonului de inlocuire ) 6. Sa creeze un fisier de comenzi cu mai multe linii de tip lista, astfel incit sa fie folositi toti separatorii: ; , && , || , & .