Sunteți pe pagina 1din 12

Operatori

Comanda test verifică îndeplinirea unls


ei condiții și întoarce o valoare care să marcheze acest lucru. Pentru a se cunoaște rezultatul testului, se folosește
variabila $?. Aceasta are valoarea 0 dacă testul este pozitiv (condiție adevarată) și o valoare diferită de 0 în caz
contrar. Verificați manualul comenzii test pentru informații suplimentare despre operatori.
Operatori pentru fișiere
-d <fis> este director?
-f <fis> este fișier obișnuit?
-r <fis> poate fi citit?
-s <fis> are dimensiune diferită de 0?
-w <fis> poate fi modificat?
-x <fis> este fișier executabil?
Exemple:
$ ls -las
$test –f fisier; echo $?
$test –d fisier; echo $?
$test –w fisier; echo $?
$[ -r fisier ] ; echo $?
$[ -w fisier ] ; echo $?

Operatori pentru șiruri de caractere


<sir> este șirul nenul?
-n <sir> are șirul lungimea diferită de 0?
-z <sir> are șirul lungimea 0?
<sir1>=<sir2> sirurile sunt identice?
<sir1>!=<sir2> sirurile sunt diferite?
Exemple:
$sir1=dansir1=da
$sir2=maria
$sir3=dan
$sir4=
Care din următoarele comenzi au ca exit status valoarea 0?
$[ “$sir1” = “$sir2” ];echo $?
$[ - z $sir3 ];echo $?
$[ - n $sir4 ];echo $?
$[ “$sir1” = “$sir3” ];echo $?
$[ $sir4 ];echo $?
Operatori pentru tipul integer
-eq int1=int2
-ge int1>= int2
-gt int1> int2
-le int1<= int2
-lt int1< int2
-ne int1 diferit de int2
Exemple:
$int1=5
$int2=10
$int3=55
$int4=5
Ce afișează comenzile?
$[ “$int1” -gt “$int2” ];echo $?
$[ ”$int2” -lt “$int3” ];echo $?
$[ ”$int4” -le “$int1” ];echo $?
$[ ”$int3” -ne “$int4” ];echo $?
$[ “$int4” -ge “$int1” ];echo $?
$int1=007
$int2=7
$[ “$int1” = “$int2” ];echo $?
$[ “$int1” -eq “$int2” ];echo $?

Operatori pentru tipul boolean


!<exp> expresie falsă?
<exp1> -a <exp2> ambele adevărate?
<exp1> -o <exp2> una din ele adevărată?
Exemple:
$v1=5
$v2=10
Ce afișează comenzile?
$[ !”$v1” -eq “$v2” ];echo $?
$[ -f “fisier” –a –x “fisier” ];echo $?
$[ “$v1” -gt 1 –a “$v1” –lt 90 ];echo $?

Alte exemple:
$test ! -s “$f” returnează valoarea 0 daca fișierul referit prin variabila $f este vid.
$test -d “$f” -a -x “$f” returnează valoarea 0 dacă ceea ce referim prin variabila $f este un director și avem drept
de execuție.
$test -c “$1” -o -b “$1” && echo “Fișier asociat unui periferic” returnează valoarea 0 dacă primul argument al liniei
de comandă este un fișier special de tip caracter sau bloc; în acest caz se afișeaza și mesajul corespunzător.
Operatori pentru tipul logic
&&
||
comanda1 && comanda2: comanda2 se execută doar dacă exit status-ul comenzii 1 are valoarea 0
comanda1 || comanda2: comanda2 se execută doar dacă exit status-ul comenzii 1 este diferit de valoarea 0
Exemplu:
$[ -x “script.sh” ] && ./script.sh

Operatori aritmetici
x=
OBS
-operanzii și operatorii se separă întotdeauna prin spații
-caracterul * este special și atunci se va utiliza întotdeauna însoțit de caracterul \
Exemple
$x=5
$y=10
$z=10
$expr $x \* $y \* $z
Pentru a incrementa o valoare:
$var=3
$var=` expr $var + 1 `; echo $var

Variabile
● Referirea variabilelor: $var
● Atribuire valori: var=valoare. De exemplu x=Miercuri este o operație de atribuire, în urma căreia variabila x
este declarată ca variabilă de tip șir de caractere și primeste valoarea “Miercuri”. Nu lăsați spații înainte sau
dupa semnul “=“.
● În sintaxa bash exista patru interpretări ale valorii unei variabile, astfel:
− nu este încadrată între ghilimele ( $var ) - șirul de caractere atribuit variabilei rămâne la fel, cu excepția
spațiilor albe consecutive, care sunt reduse la unul singur
− între ghilimele simple ( ’$var’ ) - șirul de caractere își păstrează valoarea literală, adică NU se înlocuiesc
variabilele ce apar în interiorul șirului cu valorile lor
− între ghilimele duble ( “$var” ) - variabilele sunt expandate și sunt permise caractere speciale ( de ex: \n, \
t, \nnn pentru caracter ASCII în octal etc.); în plus, spațierea în cadrul șirului se păstrează (variabila se
comporta ca un singur cuvânt)
− între backquotes ( `$var` ) - valoarea expresiei ‘$var‘ este output-ul obținut în urma execuției efective a
șirului de caractere “$var”
Diferențele sunt ilustrate în exemplele următoare:
● Un nume de variabilă poate conține litere mari și mici, cifre și caracterul “_”;
● Un identificator nu poate începe cu o cifră (evitați folosirea caracterului “_” ca prim caracter);
● Lungimea identificatorului nu este, teoretic, limitată;
● Prin convenție, variabilele definite de utilizator se scriu cu litere mici;
● Declararea unei variabile se face implicit prin atribuirea unei valori;
● Variabilele utilizate în testare sunt încadrate de ghilimele, acestea având rolul de separator pentru caracterul
null;
● Există 3 tipuri de variabile: ale sistemului, ale shell-ului și ale utilizatorului
Variabile de sistem
● Foarte multe utilitare lucrează cu variabile a căror valoare este predefinită și care se află la dispoziția tuturor
utilizatorilor (le vom numi variabile de sistem). De obicei, variabilele de sistem sunt scrise cu litere mari, pentru
a le deosebi de variabilele definite de utilizator. Modificarea valorii unei variabile sistem poate crea neplăceri,
deoarece utilitarele care folosesc valoarea variabilei vor lucra defectuos !!!
● Aceste variabile sunt inițializate de shell la deschiderea unei sesiuni cu valori precizate în fișierele
/etc/environment, /etc/profile, .profile din HomeDirectory; acestea sunt: $HOME (conține calea de acces absolut
spre directorul personal sau search path), $PATH (conține căile în care shell caută programele, de regula
/usr/bin și /bin), $PS1(ce afișează prompter-ul), $LOGNAME, $MAIL(system mail account location), $SHELL(ce
tip de shell se utilizează), $TERM (ce tip de terminal se utilizează)
● Lista acestor variabile de mediu poate fi vizualizată cu ajutorul comenzilor env sau set

● exemplu: prin intermediul variabilei PS1 avem posibilitatea de a defini prompterul într-o manieră rafinată.
Observați care este setarea implicită a variabilei PS1 executând comanda $set|more. Veți constata că pe
serverul venus.ase.ro PS1=’ \s-\v\$ ’:
o \s semnifică numele shell-ului
o \v versiunea curentă a bash
o \$ simbolul $.
În ecranul următor veți vizualiza cum se poate schimba prompter-ul introducând opțiunea \H (hostname) și \u
(username).

Alte exemple:
Identificăm care este tipul de shell implicit utilizând $SHELL.

Schimbăm calea curentă către directorul personal utilizând $HOME.


Un shell script care verifică tipul utilizatorului logat utilizând două variabile de sistem.

Utilizarea altor variabile de sistem: $MACHTYPE,$OSTYPE, $PPID. Determinați ce afișează PPID.

Variabile ale shell-ului


În terminologia Unix/Linux, se folosesc termenii de variabilă de shell și variabila de mediu, cu semnificații diferite:
variabila de shell este o variabila accesibilă doar procesului shell curent, pe când variabila de mediu este o variabila
accesibilă tuturor proceselor fii ale acelui proces shell (este o variabilă exportată).
● Sunt modificate dinamic de interpretor; acestea sunt: $0, $#, $?, $!, $$, $n (n=1-9), $@;
o $#Numărul de argumente poziționale pentru shell
o $0 Numele shell script-ului ce se execută
o $@ lista de argumente
o $$ Identificatorul de proces al shell-ului activ
o $2 Argumentul al 2-lea
o $? conține codul de revenire (exit status) al ultimei comenzi executate
o $! Identificatorul (pid) ultimului proces lansat in parallel
Exemple de utilizare variabile shell

#!/bin/bash
if [ $# -ne 1 ]
then
echo „executa astfel: $0 cale”
else
if [ ! -d $1 ]
then
echo ” argumentul nu este o cale valida”
else
for x in $1/*
do
if [ -s $x ]
then
continue
else
rm –rf $x
fi
done
fi
fi
Precizați care este rezultatul execuției următorului script.
Precizați care este funcționalitatea următorului shell script.

Urmează utilizarea parametrului pozitional $!.


Variabile definite de utilizator
● Definite de utilizator
$TEST1=“HELLO WORLD”
$echo $TEST1
HELLO WORD
● Trimiterea variabilelor comenzilor
$DEMO=/usr/bin
$echo $DEMO
/usr/bin
$cd $DEMO
$pwd
/usr/bin
● Trimiterea variabilelor comenzilor ca parte a unei comenzi (cu{})
$name=gr1000
$echo $name
gr1000
$echo ${name}a
gr1000a
$echo $name a
gr1000 a
● Trimiterea ieșirilor comenzilor către variabile (comanda trebuie să fie între ` `, altfel o interpretează ca text
(fără ’ ’ sau “ “)
$TODAY=`date`
$echo $TODAY
$DIR=`ls –la`
$echo $DIR
● Definirea variabilelor de la tastatura. Pentru a avea un contact direct cu utilizatorul, în afara folosirii
parametrilor de poziție, există posibilitatea de a seta valori pentru variabile prin intermediul comenzii read.
Datele citite sunt transmise pe canalul de intrare standard și memorate în variabilele pasate ca parametri
din comanda read. Sintaxa este următoarea: read (variabila). La întâlnirea unei comenzi read, shell-ul
așteaptă introducerea datelor și validarea lor prin apăsarea tastei ENTER. Shell-ul împarte linia în cuvinte,
afectând primul cuvânt primei variabile, al doilea celei de-a doua variabile...ultimele cuvinte sunt memorate
în ultima variabilă($read a b c). Este de dorit ca orice comandă read să fie precedată de un echo, pentru a
se explica utilizatorului ce dorim sa introducă.
$cat fisier
echo Introduceti numele:
read nume
echo Hello $nume
● Operații aritmetice
$num=2
$expr $num + 2
4
$expr $num \* 2
4
$rezultat =`expr $num \* 3`
$echo $rezultat
6
● Manipulari de date (concatenare variabila)
$nume=steve
$prenume=norton
$fullname=`echo Numele este $nume $prenume`
$echo $fullname >temp
$cat temp
Numele este steve norton
● Caracterele \, ’, “ (\ -schimba semnificația caracterului următor);
$echo “\” “

$a=fred
$echo ’$a’
$a (afiseaza textul $a)
$echo “$a”
fred

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