Documente Academic
Documente Profesional
Documente Cultură
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”
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 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”:
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
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)
Exemple:
ps
Otilia PETCU
Pagina 5
ps -f
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
#!/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
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.
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
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”
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))”
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
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
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