Sunteți pe pagina 1din 15

SISTEME DE OPERARE

LABORATOR 2

Topicuri:
1. Comenzi pipe și filter
2. Managementul proceselor în
Unix
3. Shell Scripting
4. Utilizarea variabilelor
5. Array-uri
6. Operatori
7. Instrucțiuni decizionale
8. Aplicații
1. Comenzi pipe și filter
Un pipe reprezintă o formă de redirecționare (transferul outputului standard către o altă
destinație). Acesta este utilizat în Linux pentru a trimite rezultatul unei comenzi, unui
program sau unui proces către o altă comandă, program sau proces pentru o procesare
ulterioară. Acest lucru se poate realiza cu ajutorul caracterului pipe „|”, utilizat între două
sau mai multe comenzi.
Filtrele reprezintă programe care preiau text simplu (fie stocat într-un fișier, fie produs
de alt program) ca input standard, îl transformă într-un format semnificativ și apoi îl
returnează ca output standard.
1.1. Comanda grep

Comanda grep caută într-un fișier sau în mai multe fișiere linii care au un anumit pattern.
Sintaxă:
$ grep pattern fișier(e)

Exemplu:
ls –l | grep “feb”

Opțiuni care pot fi folosite alături de comanda ”grep”:


Opțiune Descriere
-v Afișează toate opțiunile diferite de pattern
-c Afișează numărul potrivirilor cu pattern-ul
-i Potrivește atât literele mici, cât și cele mari
-n Afișează numărul liniei unde a fost identificat
pattern-ul

Otilia PETCU
Pagina 1
Pentru a realiza o căutare, un pattern poate avea una dintre următoarele sintaxe:

Pattern Descriere
abc Potrivește exact acest string ”abc”
[abc] Potrivește unul dintre caractere: ”a”, ”b” sau
”c”
[^abc] Potrivește toate caracterele cu excepția
acestora: ”a”, ”b” sau ”c”
[a-c] Potrivește un caracter între ”a” și ”c”
* Potrivește orice caracter

Exemple:
 Să se afișeze toate fișierele și directoarele care nu conțin pattern-ul ”feb”:
ls –l | grep – v “feb”

 Să se afișeze numărul fișierelor și directoarelor care conțin pattern-ul ”feb”:


ls –l | grep – c “feb”

 Să se afișeze toate fișierele și directoarele care conțin litera ”s” sau ”S”:
ls –l | grep – i “s”

Otilia PETCU
Pagina 2
 Să se afișeze numărul liniei pe care se află pattern-ul ”friends” din fișierul
”exemplu”:

1.2. Comanda sort


Comanda sort este utilizată pentru a sorta înregistrările unui fișier, aranjându-le alfabetic
sau numeric. De menționat este faptul că liniile care încep cu un număr vor apărea înaintea
liniilor care încep cu o literă, iar liniile care încep cu majusculă vor apărea înaintea liniilor care
încep cu aceeași literă, dar minusculă.
Sintaxă:
$ sort fișier

Exemplu:
 Să se afișeze conținutul sortat al fișierului ”mașini.txt”:
sort masini.txt

Otilia PETCU
Pagina 3
Opțiuni care pot fi folosite alături de comanda ”sort”:
Opțiune Descriere
-n Sortează numeric (de exemplu: 10 va apărea
după 2) și ignoră spațiile libere
-r Inversează ordinea sortării

Exemple:
 Să se sorteze numeric conținutul fișierului ”numbers.txt”:
sort –n numbers.txt

 Să se afișeze conținutul fișierului ”mașini.txt” sortat invers:


sort –r masini.txt

Otilia PETCU
Pagina 4
2. Managementul proceselor in Unix
Un process reprezintă o instanță a unui program care rulează, adică un proces pornește în
momentul în care se execută o comandă. Sistemul de operare urmărește procesele printr-un ID
cunoscut sub numele de PID sau ID-ul procesului. Fiecare proces din sistem are asociat un PID
unic.
Există două tipuri de procese:
- Procese de prim plan (foreground processes)
- Procese de fundal (background processes)

2.1. Procese de prim plan


În mod implicit, fiecare proces început rulează în prim plan. Acesta primește intrarea de
la tastatură și afișează rezultatul pe ecran.
Observație! În timp ce un program rulează în prim plan și consumă mult timp, nu pot fi
executate alte comenzi (nu se pot porni alte procese), deoarece promptul nu va fi disponibil
până când programul nu termină procesarea.

2.2. Procese de fundal


Un proces de fundal rulează fără ca acesta să fie conectat la tastatură, iar dacă acesta necesită
orice intrare, așteaptă. Avantajul rulării unui proces în fundal este faptul că se pot rula alte
comenzi, fără a fi nevoie să se termine un proces pentru a putea începe altul.
Cel mai simplu mod de a începe un proces de fundal este adăugarea simbolului ”&” la
sfârșitul comenzii.

2.3. Afișarea proceselor în derulare


Pentru a putea vedea procesele care rulează se utilizează comanda ps (process status).

Exemple:
ps

Otilia PETCU
Pagina 5
ps -f

Descrierea câmpurilor afișate după rularea comenzii ”ps –f”:


Câmp Descriere
UID Utilizatorul căruia îi aparține acest proces
(persoana care îl execută)
PID ID-ul procesului
PPID ID-ul procesului părinte (ID-ul procesului
care l-a pornit)
C Utilizarea CPU a procesului
STIME Ora de începere a procesului
TTY Tipul terminalului asociat procesului
TIME Timpul CPU al procesului
CMD Comanda care a început acest proces

2.4. Oprirea proceselor


Pentru oprirea unui proces se utilizează comanda kill împreuna cu PID-ul acestuia.
Exemplu:
kill 2940

3. Shell Scripting
Un script shell reprezintă un program conceput pentru a fi rulat de shell-ul Unix. Acesta
conține o serie de comenzi pe care shell-ul le citește, le interpretează și le execută.
Pașii necesari pentru crearea, editarea și executarea unui shell script:
1. Se crează fișierul ”test.txt”:
touch test.txt

2. Se editează conținutul fișierului ”test.txt”:


nano test.txt

#!/bin/bash
pwd
ls

Otilia PETCU
Pagina 6
3. Se adaugă drept de execuție fișierului ”test.txt” în cazul în care acesta lipsește:
chmod +x test.txt

4. Se execută scriptul:
./test.txt

3.1 Opțiunea noclobber


Opțiunea noclobber împiedică suprascrierea fișierelor existente cu ajutorul operatorului >.
Opțiune Descriere
-o Activează opțiunea noclobber
+o Dezactivează opțiunea noclobber

Exemplu:
touch test
echo “Hello” > test
cat test
set –o noclobber
echo “Hello again” > test
cat test
set +o noclobber
echo “Hello again” > test
cat test

4. Utilizarea variabilelor
O variabilă reprezintă un șir de caractere căruia i se atribuie o valoare. Valoarea atribuită
poate fi un număr, text, nume de fișier, dispozitiv sau orice alt tip de date.
O variabilă nu este altceva decât un pointer către datele reale. Shell-ul permite crearea,
atribuirea și ștergerea variabilelor.
Otilia PETCU
Pagina 7
4.1 Nume de variabile:
Numele unei variabile poate conține doar litere (de la a la z sau de la A la Z), numere
(de la 0 la 9) sau underscore (_). Prin convenție, variabilele Unix se scriu cu majuscule.

4.2 Definirea variabilelor:


Forma generală:
denumire_variabilă=valoare_variabilă

Exemplu:
VAR1=”Shara”
VAR2=10

Variabilele de acest tip se numesc variabile scalare. Acestea pot deține o singură valoare
la un moment dat. Shell-ul permite stocarea oricărei valori într-o variabilă.
4.3 Accesarea variabilelor
Pentru a accesa valoarea stocată într-o variabilă, se adaugă semnul $ înaintea numelui
acesteia.
Exemplu:
#!/bin/bash
NAME=”Shara”
echo $NAME

4.3 Variabile speciale


Variabilă Descriere
$0 Denumirea scriptului curent
$n Argumentele pe care le utilizează scriptul
curent
Exemplu: $1 – primul argument
$# Numărul de argumente ale scriptului curent
$*, $@ Argumentele scriptului curent
$$ ID-ul procesului care execută shell-ul curent
$? Statusul de ieșiere al ultimei comenzi
executate

Otilia PETCU
Pagina 8
Exemplu:
#!/bin/bash
echo ”Numele fișierului: $0”
echo ”Primul argument: $1”
echo ”Al doilea argument: $2”
echo ”Argumentele: $*”
echo ”Numărul total de argumente: $#”
echo ”ID-ul procesului: $$”

5. Array-uri
Array-urile reprezintă o metodă de grupare a unui set de variabile.
5.1 Definirea valorilor unui array
Forma generală:
denumire_array[index]=valoare

Exemplu:
NAME[0]=”Shara”
NAME[1]=”Lucy”
NAME[2]=”Jessica”
NAME[3]=”Julie”

5.2 Accesarea unui array


Forma generală:
${denumire_array[index]}

Exemplu:
#!/bin/bash
NAME[0]=”Shara”
NAME[1]=”Lucy”
NAME[2]=”Jessica”
NAME[3]=”Julie”
echo “Primul nume: ${NAME[0]}”
echo “Al doilea nume: ${NAME[1]}”
echo “Al treilea nume: ${NAME[2]}”
echo “Al patrulea nume: ${NAME[3]}”

Otilia PETCU
Pagina 9
Toatele elementele unui array se pot accesa folosind comanda ${denumie_array[*]}
sau comanda ${denumire_array[@]}.
Exemplu:
#!/bin/bash
NAME[0]=”Shara”
NAME[1]=”Lucy”
NAME[2]=”Jessica”
NAME[3]=”Julie”
echo “Elementele array-ului: ${NAME[*]}”

6. Operatori
6.1 Operatori aritmetici
Operator Descriere Exemplu
+ Adunarea a două numere `expr $a + $b`
$((a+b))
- Scăderea a două numere `expr $a - $b`
$((a-b))
* Înmulțirea a două numere `expr $a * $b`
$((a*b))
/ Returnarea câtului împărțirii `expr $b / $a`
a două numere $((a/b))
% Returnarea restulului `expr $a % $b`
împărțirii a două numere $((a%b))
= Atribuirea unei valori a = $b
== Compară două numere și [ $a == $b ]
returnează true daca acestea
au aceeași valoare
!= Compară două numere și [ $a != $b ]
returnează true daca acestea
au valori diferite

Otilia PETCU
Pagina 10
Exemplu:
#!/bin/bash
echo ”Introduceți primul număr: ”
read a
echo ”Introduceți al doilea număr: ”
read b
echo ”Suma este: `expr $a + $b`”
echo ”Diferența este: `expr $a - $b`”
echo ”Produsul este: $((a*b))”
echo ”Câtul împărțirii este: $((a/b))”
echo ”Restul împărțirii este: $((a%b))”

6.2 Operatori relaționali


Operator Descriere Exemplu
-eq Verifică dacă două valori [ $a -eq $b ]
sunt egale
-ne Verifică daca două valori [ $a -ne $b ]
sunt diferite
-gt Verifică dacă valoarea [ $a -gt $b ]
operandului stâng este mai
mare decât valoarea
operandului drept
-lt Verifică dacă valoarea [ $a -lt $b ]
operandului stâng este mai
mică decât valoarea
operandului drept
-ge Verifică dacă valoarea [ $a -ge $b ]
operandului stâng este mai
mare sau egală cu valoarea
operandului drept
-le Verifică dacă valoarea [ $a -le $b ]
operandului stâng este mai
mică sau egală cu valoarea
operandului drept

Otilia PETCU
Pagina 11
6.3 Operatori booleeni
Operator Descriere Exemplu
! Operatorul pentru negație [ ! false ]
-o Operatorul ”sau”. Dacă unul [ $a -lt 20 -o $b -gt 100 ]
dintre operanzi este adevărat,
atunci returnează true
-a Operatorul ”și”. Returnează [ $a -lt 20 -a $b -gt 100 ]
true doar dacă ambii operanzi
sunt adevărați

6.4 Operatori de testare pentru șiruri


Operator Descriere Exemplu
= Verifică dacă valoarea a doi [ $a = $b ]
operanzi este egală
!= Verifică dacă valoarea a doi [ $a != $b ]
operanzi este diferită
-z Verifică dacă dimensiunea [ -z $a ]
șirului este egală cu zero
-n Verifică dacă dimensiunea [ -n $a ]
șirului este diferită de zero

6.5 Operatori de testare pentru fișiere


Operator Descriere Exemplu
-d fișier Verifică dacă un fișier este un [ -d $fișier ]
director
-f fișier Verifică dacă un fișier este un [ -f $fișier ]
fișier obișnuit
-r fișier Verifică dacă un fișier are [ -r $fișier ]
drepturi de citire
-w fișier Verifică dacă un fișier are [ -w $fișier ]
drepturi de scriere
-x fișier Verifică dacă un fișier are [ -x $fișier ]
drepturi de execuție
-s fișier Verifică dacă dimensiunea [ -s $fișier ]
fișierului este mai mare decât
zero
-e fișier Verifică dacă un fișier există [ -e $fișier ]

Otilia PETCU
Pagina 12
7. Instrucțiuni decizionale
7.1 Instrucțiunea IF ELSE
În Unix sunt suportate următoarele forme ale instrucțiunii if else:
- Instrucțiunea IF FI:
if [ expresie ]
then
Instrucțiune/intrucțiuni executată/e dacă expresia este
adevărată
fi

- Instrucțiunea IF ELSE FI:


if [ expresie ]
then
Instrucțiune/intrucțiuni executată/e dacă expresia este
adevărată
else
Instrucțiune/intrucțiuni executată/e dacă expresia nu este
adevărată
fi

- Instrucțiunea IF ELIF ELSE FI:


if [ expresie1 ]
then
Instrucțiune/intrucțiuni executată/e dacă expresia1 este
adevărată
elif [ expresie2 ]
then
Instrucțiune/intrucțiuni executată/e dacă expresia2 este
adevărată
else
Instrucțiune/intrucțiuni executată/e dacă niciuna dintre
expresii nu este adevărată
fi

Otilia PETCU
Pagina 13
7.2 Instrucțiunea CASE ESAC
case word in
pattern1)
Instrucțiune/intrucțiuni executată/e dacă se potrivește
pattern1
;;
pattern2)
Instrucțiune/intrucțiuni executată/e dacă se potrivește
pattern2
;;
pattern3)
Instrucțiune/intrucțiuni executată/e dacă se potrivește
pattern3
;;
*)
Condiția default care se va executa dacă nu se potrivește
niciun pattern
;;
esac

8. Aplicații
8.1 Să se citească de la tastatură două numere și să se afișeze valoarea mai mare.
8.2 Să se verifice dacă suma a două numere citite de la tastatură este un număr par sau impar.
8.3 Să se scrie un script care verifică prin preluarea ca argument a unui nume de fișier dacă
acesta este un fișier obișnuit sau un director.
8.4 Să se scrie un script care afișează zilele săptămânii.
8.5 Să se verifice dacă un număr citit de la tastatură se află intr-un interval dat.
8.6 Să se scrie un script care determină tipul unui triunghi.
8.7 Să se scrie un script care afișează limba oficială a unei țări.

Otilia PETCU
Pagina 14

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