Professional Documents
Culture Documents
Noiuni generale
Variabile de mediu
Variabilele de mediu pot sa conin ca valoare un sir de caractere. Atribuirea de valori se face astfel:
variabila=valoare
n UNIX exista cteva variabile predefinite.
variabile read-only, actualizate de interpretor:
succes.
Instruciunea until
until lista1
do lista2
done
Se executa comenzile din lista2 in mod repetat, pana cnd lista de comenzi lista1 se ncheie cu cod
de succes.
Instruciunea for
for variabila [in val1 val2 ...]
do lista
done
Se executa lista de comenzi n mod repetat, variabila lund pe rand valorile val1, val2, ... Dac
lipsete cuvntul cheie in, valorile pe care le va lua pe rand variabila vor fi parametrii din linia de
comanda pe care i-a primit fiierul de comenzi atunci cnd a fost lansat n execuie.
Alte comenzi
break - permite ieirea din ciclu nainte de ndeplinirea condiiei;
continue - permite reluarea ciclului cu urmtoarea iteratie, inainte de terminarea iteratiei
curente;
exec cmd - comenzile specificate ca argumente sunt executate de interpretorul de comenzi n
loc sa se creeze procese separate de execuie; dac se dorete rularea comenzilor n procese
separate ele se scriu direct, asa cum se scriu si in linia de comanda
shift - realizeaz deplasarea argumentelor cu o poziie la stnga ($2$1, $3$2 etc);
wait [pid] - permite sincronizarea unui proces cu sfritul procesului cu pid-ul indicat sau cu
sfarsitul tuturor proceselor "fii";
expr expresie - permite evaluarea unei expresii.
Mersul lucrrii
Primul script Hello World
Orice script trebuie sa nceap cu linia
#!/bin/bash
Pentru a afla adresa bash exact de pe calculatorul Dumneavoastr utilizai instruciunea which:
whichbash
Aceast linie este utilizat pentru a specifica faptul ca scriptul dumneavoastr trebuie interpretat de
ctre shell-ul bash care se gsete la adresa indicat.
Scriptul care permite afiarea unui mesaj de ntmpinare Buna ziua ! este expus mai jos :
#!/bin/bash
echoBunaziua!
3
Mai departe este expus procesul prin care se editeaz scriptul shell i se ruleaz :
$cat>BunaZiua.sh
#!/bin/bash
echoBunaziua!
Ctrl+C
chmod+xBunaZiua.sh
./BunaZiua.sh
Bunaziua!
$
Orice script shell trebuie salvat ntr-un fiier cu un nume NumeScript.sh , extensia este opional.
Fiierul trebuie s fie cu drept de executare. Execuia scriptului se realizeaz cu ajutorul comenzii
sau
$bashcaleacatrescriptuldumneavoastra
$./numescript
Scripturi simple
1. Creai un script care afieaz numrul de argumente ce i-au fost transmise i le afieaz n
continuare unul cte unul. n cazul cnd nu i-au fost transmise argumente, ea emite mesajul:
"Nici un argument transmis". Modificai scriptul pentru a afia argumentele n ordine
inversa
2. Analizai scriptul urmtor:
#!/bin/bash
((test$1lt$2)&&(echo'$1<$2'))||(echo'$2<$1')
Ce face el ? Dup testarea scriptului nlocuii ghilimelele simple cu ghilimele duble. Lansai
din nou scriptul. Ce ai constatat? Explicai.
Studiati codul returnat dup executarea acestui script. Explicati.
Rescriei scriptul utiliznd structura if then else fi
3. Cnd executai un script, un shell nou demar pentru a executa instruciunile coninute n
script. Sa testam aceasta afirmaie cu un exemplu. Creai un script cu urmtorul coninut:
echoPIDulmeueste$$
Variabila special $$ ne da PID-ul procesului. Executai scriptul de mai multe ori i
comparai rezultatele. Ce constatai? Vi se pare normal? Explicai.
Exerciii
1. Modificai scriptul BunaZiua.shredenumindu-l nBunaZiuaNume.shdup cum
urmeaz:
a) dac i transmitei doua argumente, primul coninnd numele iar al doilea prenumele, el
trebuie s le afieze dup salutare (de ex. Buna ziua, Nume Prenume)
b) dac nu-i transmitei nici un argument, el trebuie sa va afieze dup salutare numele de
conectare al utilizatorului (LOGNAME)
2. Realizai un script shell UNIX care permite curarea ecranului iar apoi afieaz structura
de fiiere i directoare a directorului pe care l-ai furnizat ca argument. Indicaie: comanda
care cur ecranul este clear. Studiai pagina de manual a acestei comenzi !
3. Modificai scriptul precedent pentru a afia structura de fiiere i directoare a dosarului
4
Coninutul raportului
Facei un raport prezentnd mersul exerciiilor i prezentai-l pentru validare la sfritul lucrrii de
laborator sau n decurs de o sptmna dup efectuarea lucrrii (prin e-mail la adresa
victor.moraru@utm.md). Includei n fiecare rspuns textul scriptului respectiv. Punei toate
fiierele cu scripturi ntr-o arhiva tar.gz cu numele: NumePrenume-Lab4.tar.gz. Numii scripturile n
funcie de numrul exerciiului (de exemplu 7.sh pentru exerciiul 7, 15b.sh pentru punctul b al
exerciiului 15, etc.). Trimitei arhiva mpreun cu raportul prin pota electronic.
5
Referine