Documente Academic
Documente Profesional
Documente Cultură
PECHEANU
TEMA LABORATORULUI
1. Limbajul de programare Shell -instructiuni de control
2. Aplicatii
1. INSTRUCTIUNI DE CONTROL
1.1. CICLAREA
while <lista-1>
do
<lista-2> (1)
done
Secventa de instructiuni <lista-2> se va executa pina cind lista de istructiuni <lista-
1> intoarce 0, adica succes (adevarat). Se iese din ciclu cu valoarea 1, adica esec (false),
intoarsa de <lista-1>.
While, do, done, sunt cuvinte cheie care marcheaza elementele structurii.
until <lista-1>
do
<lista-2> (2)
done
Secventa de instructiuni <lista-2> se va executa pina cind lista de istructiuni <lista-
1> intoarce 1, adica esec (fals). Se iese din ciclu cu valoarea 0, adica esec (false), intoarsa de
<lista-1>.
Until, do, done, sunt cuvinte cheie care marcheaza elementele structurii.
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 I 2006-2007
PECHEANU
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.
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 *, ? , [...].
test expr evalueaza expresia expr; se poate folosi si [ expr ] (vezi lab 4, 1.1)
eval arg argumentele comenzii sunt interpretate ca intrare pentru Shell (ex:
cmd=pwd; eval $cmd afiseaza directorul curent).
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:
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:
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 I 2006-2007
PECHEANU
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 .
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