Sunteți pe pagina 1din 3

LABORATORE NR.

5 -6
SISTEME DE OPERARE
TEMA LABORATORELOR
1. Fiiere de comenzi indirecte sub UNIX
2. Aplicaii
1. FIIERE DE COMENZI INDIRECTE SUB UNIX
1.1. NOIUNI INTRODUCTIVE
Interpretorul de comenzi (Shell-ul) sistemului de operare UNIX este nu numai un limbaj de comanda,
el dispune i de posibilitatea intrepretrii unor elemente specifice limbajelor de programare de nivel nalt, cum
ar fi variabile, proceduri sau structuri de control. Aceste elemente specifice unui limbaj de programare,
mpreun cu comenzile interpretorului pot utilizate n fiierele de comenzi indirecte, sau script-uri Shell.
Comenzile coninute ntr-un script Shell sunt executate nlnuit (fr intervenia utilizatorului) la lansarea
n execuie a acestuia. ntre diversele sisteme de operare exist mari diferene n ceea ce privete posibilitile
de utilizarea a limbajului de comand ca limbaj de programare. La o extrem se situeaz MS-DOS, la care
flexibilitatea limbajului este foarte redus, fiierele de comenzi fiind o de cele mai multe ori o niruire de
comenzi elementare. La cealalt extrem, sistemele de operare RSX si VMS ofer un limbaj de comenzi
extrem de puternic, cu multiple faciliti. Limbajul interpretorului (interpretoarelor) de comenzi UNIX ofer
utilizatorului suficiente faciliti pentru a realiza script-uri shell cu un grad semnificativ de complexitate. Orice
sistem UNIX este livrat cu cel puin dou interpretoare de comenzi; utilizatorul poate s le foloseasc la
alegere att n lucrul interactiv, ct i n cazul fiierelor de comenzi:
- bash, interpretorul de comenzi Bourne; utilizatorul poate folosi n script-uri toate comenzile
interpretorului, instructiunile uzuale de programare structurat: if, while, case i poate defini
subprograme (funcii shell);
- csh, (sau n Linux tcsh) interpretorul de comenzi C, care este destinat mai ales programatorilor; acesta
accept un limbaj de comenzi diferit de bash, comenzile avnd o sintax apropiat de limbajul C; csh
ofer posibilitatea de a folosi variabile structurate (tablouri).
1.2. EXECUIA FIIERELOR DE COMENZI
Lansarea n execuie a unui script Shell poate face prin mai multe metode:
1. prin precizarea direct a fiierului de comenzi:
bash nume_fiier_comenzi
2. prin includerea n script-ul Shell n prima linie a sirului:
#!/bin/bash
3. prin lansarea n execuie direct a fiierului de comenzi:
nume_fiier_comenzi
n aceste dou ultime cazuri fiierul de comenzi trebuie s aib privilegiul de execuie pentru "lume",
privilegiu care se seteaz cu: chmod a+x nume_fiier_comenzi.
1.3. VARIABILE SHELL
n limbajul interpretorului de comenzi se pot defini i utiliza variabile, avnd n general ca valori iruri
de caractere. Variabilele obinuite sunt locale instanei interpretorului corespunztoare unui utilizator.
Atribuirea unei valori unei astfel de variabile iar apoi vizualizarea ei se face prin comenzile:
nume_variabila = valoare
1

echo $nume_variabil
Pentru ca valoarea unei variabile s fie accesibil proceselor lansate de instana interpretorului, este
necesar ca ea s fie exportat (nscris n mediu). Exportarea se face cu comanda export (vezi laboratorul
nr.1):
export nume_variabila=valoare
Interpretorul de comenzi Shell recunoate o serie de variabile predefinite. Acestea sunt de dou feluri:
1. variabile read-only pentru utilizator (actualizate doar de interpretor):
$? conine codul de retur al ultimei comenzi executate;
$$ - identificatorul de proces al Shell;
$! - identificatorul ultimului proces lansat n paralel;
$# - conine numrul de argumente poziionale pentru Shell;
$0 conine numele comenzii executate de shell;
$1, $2,... conin argumentele poziionale la apelul unei comenzi Shell.
2. variabile iniializate la intrarea n sesiune a utilizatorului:
$HOME conine numele directorului de referina al utilizatorului (home directory);
$PATH conine cile de cutare pentru Shell;
$PS1 - definete prompterul asociat Shell (implicit $);
$PS2 - definete al doilea prompter (implicit >) pentru cazul n care o comanda se continu
pe o a doua linie;
$LOGNAME conine numele de conectare al utilizatorului;
$TERM conine numele terminalului pe care se lucreaz
Aceste variabile sunt iniializate de ctre Shell la deschiderea unei sesiuni utilizator cu valorile precizate n
fiierele /etc/profile si $HOME/.profile, constituind mediul (environment) n care se vor executa toate
comnzile lansate ulterior de utilizator. La lansarea n execuie sub UNIX a unui program, acesta primete din
partea procesului printe o serie de atribute, informaii i variabile care sunt utilizate pentru a controla: modul
de execuie, privilegiile, sursa datelor prelucrate i destinaia rezultatelor produse. n linii mari aceste
informaii sunt:
un numr de identificare al utilizatorului (uid) i un numr de identificare al grupului din care acesta face
parte;
un numr de fiiere deschise: standard input, standard output, standard error.
iruri de caractere de tipul NUME=valoare, care se numesc variabile de mediu;
un numr de parametri, dintre care cel puin unul este prezent, reprezentnd 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 su (adic ls), ca parametru 1 opiunea l, ca parametru 2 primul fiier rezultat din expandarea
ablonului *.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 fiier de comenzi. Parametrii transmii procedurii sunt identificai
prin variabilele predefinite $0 (pentru numele comenzii) i $1, $2, ... pentru parametrii poziionali. Variabila
$# conine numrul acestor parametri. Procedurile Shell se pot apela recursiv.
Noiunea de instruciune dintr-un limbaj de programare este nlocuit ntr-un fiier de comenzi prin
noiunea de comand.
n urma execuiei, fiecare comand furnizeaz un cod de retur, care va fi 0 (adevrat) n cazul execuiei
2

corecte sau o
Shell:

valoare diferit de 0 n caz contrar. Exist trei tipuri de comenzi care pot aprea n programele
comenzi simple, formate din nume comand plus argumente;
comenzi n "pipe", formate din iruri de comenzi conectate n cascada cu |;
liste, care sunt secvene de comenzi simple sau comenzi n pipe separate prin:
- ";" sau newline, indicnd execuia secvenial;
- "&&", indicnd execuia celei de-a doua comenzi doar dac prima returneaz adevrat
(execuie corect);
- "||", indicnd execuia celei de-a doua comenzi doar dac prima returneaz fals (execuie
incorect);
- "&", indicnd execuia n paralel a comenzilor.

Observaie: Interpretorul Shell permite lucrul simultan cu mai multe comenzi (sau fiiere de comenzi).
Acestea se pot executa fie n prim plan (interactiv -foreground) fie n fundal (neinteractiv - background). O
comand care se termin cu caracterul & este lansat n fundal i se va executa n paralel cu o alta care este
lansat n continuare. Acest lucru este util n cazul comenzilor a cror execuie dureaz mai mult. La
terminarea unei astfel de comenzi, interpretorul afieaz un mesaj informativ.
2. APLICAII
I. S se studieze informaiile referitoare la comenzile stty, df si sed din manulal on-line
II. S se rezolve exerciiile urmtoare:
1. S se schimbe coninutul fiierului de comenzi .bash_profile astfel nct la conectarea pe cont
s se afieze data calendaristic, caracteristicile terminalului, spaiul liber pe disk i un mesaj de
salut.
2. S se creeze un script Shell cu cel puin dou comenzi (fr a se folosi un editor de texte). S
se lanseze n execuie prin cele 3 metode artate la paragraful 1.2.
3. S se nlocuiasc cele dou promptere afiate de sistem cu iruri de cel puin dou cuvinte. S
se gaseasc un exemplu de afiare a celor dou promtere.
4. S se creeze un fiier text care conine de mai multe ori irul ".htm". S se scrie un fiier de
comenzi indirecte care afieaz coninutul fiierului, apoi modific toate irurile ".htm" n
."html" i afieaz din nou coninutul acestui fiier.
5. S se creeze un fiier de comenzi cu mai multe linii de tip list, astfel nct s fie folosii toi
separatorii: ; , && , || , & .

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