Documente Academic
Documente Profesional
Documente Cultură
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.
#!/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.