Sunteți pe pagina 1din 4

Disciplina: USODM Prof: Golub A.

Shell Script în sistemele Linux | Partea I

Ce este SHELL?
Shell (engl. „scoică” sau „înveliş”) este numele generic pentru interpretorul de comenzi al Unix (şi,
implicit, Linux). Shell-ul este un înveliş pentru sistem, o interfaţă între sistem şi utilizator. Deoarece noi,
uneori, nu ştim exact cum funcţionează Hard Disk-ul, reţeaua sau alte periferice, putem folosi comenzile
shell-ului pentru a le accesa. Putem porni şi diferite programe din shell, acesta rezolvând problema
iniţializării şi execuţiei lor.
Shell-urile au evoluat prin înlănțuirea într-un fişier a comenzilor pe care vrem ca shell-ul să le
interpreteze. Aceste fişiere se numesc scripturi, sau fişiere de comenzi. Așadar, un program shell,
denumit script shell, este folosit pentru a îmbina mai multe comenzi şi diverse structuri de control pentru
a obţine o nouă funcţionalitate sau pentru automatizarea sarcinilor.
Faptul că nu trebuie să tastăm din nou aceeaşi secvenţă de comenzi de mai multe ori, ci le scriem
într-un script şi executăm scriptul când avem nevoie, este util, dar nu destul. De aceea, scripturile pot
conţine blocuri condiţionale şi bucle, cum ar fi if, for, while.
Aceste posibilităţi fac scripturile foarte puternice, comparabile cu programe în limbaje de nivel înalt
ca, de exemplu, C, compilate şi linkeditate. Mai mult, în unele cazuri, sunt chiar mai bune, deoarece, pe
de o parte, în limbajele de programare, este destul de complicat să deschizi un fişier, iar pe de altă parte,
scripturile nu trebuie compilate – le scriem într-un editor de text, salvăm, le dăm dreptul de execuţie şi le
şi putem executa. Dacă vrem să schimbăm ceva, modificăm scriptul – un fişier text. Desigur, ele nefiind
programe în cod maşină nativ (compilate şi linkeditate), sunt mai lente, dar sunt uşor de dezvoltat şi
adaptabile.

Puţină istorie
Cei care au creat Unix, nu au vrut un shell fix, ci interschimbabil, în funcţie de preferinţele
utilizatorilor şi de scopurile pentru care se folosea shell-ul respectiv. Primul shell de Unix a fost Bourne
shell, prescurtat sh.
Mai târziu, Unix a ajuns de la Bell Labs şi la Universitatea Berkeley din California, unde studenţii
au dezvoltat şi mai mult shell-ul, care a început să arate mai mult a limbaj de programare, asemănător cu
C-ul. L-au denumit C shell (pronunţat „sea 2 shell” – scoică de mare). Deşi C shell era mai performant
pentru unele scopuri, AT&T (de care aparţinea Bell Labs) a început să folosescă şi C shell pe sistemele
sale System V destul de târziu, dat fiind faptul că AT&T nu avea încredere într-un shell scris de studenţi.
Cei de la Free Software Foundation vroiau şi ei shell-ul, dar C shell era restricţionat de AT&T la
vremea aceea. Totuşi, colecţia de soft pentru Unix a celor de la FSF, colecţie numită GNU (care înseamnă
„GNU is Not Unix” – „GNU nu este Unix”), avea nevoie de un shell. Aşa că şi l-au scris ei: au luat
Bourne shell, au luat câteva idei utile din C shell, au mai adăugat câteva idei noi şi voilà! Aşa a apărut
Bourne Again shell, sau bash.
AT&T, văzând că a rămas în urmă cu noutăţile, l-a pus pe cercetătorul David Korn să cerceteze
shell-urile disponibile, care a luat ce era mai bun şi a creat Korn shell sau ksh, mai util programatorilor.
După ce ksh a primit şi o interfaţă grafică, cei de la Open Software Foundation l-au inclus în
sistemul lor ca Desktop ksh sau dtksh.
Sunt şi alte variante de shell-uri Unix (tcsh, ash, zsh, pdksk, perl, tcl/tk, python etc.), dar cel mai
utilizat în Unix este bash.
Disciplina: USODM Prof: Golub A.

Crearea de scripturi
Un script este un fișier text executabil, astfel:
a) pentru crearea unui fișier de tip text poate fi folosit un editor de text: nano, gedit, mcedit, vi,
etc.
Ex: gedit script.sh
Observație: Este indicat să se folosească extensia .sh pentru scripturi, dar nu este obligatoriu, se va
executa și un script aflat în fișierul script.txt
b) pentru a fi interpretat ca un script bash, prima linie trebuie să conțină #!/bin/bash
c) spațiile din text sunt interpretate diferit în funcție de context, se recomandă scrierea
comenzilor pe linii separate.

Conținutul fișierului va avea următoarea formă:


#!/bin/bash
echo 'first try'

S-a folosit comanda echo ce are ca efect afișarea la ieșirea standard. Acest script va afișa pe ecran terminal
mesajul first try.

Execuția scripturilor
Pentru a rula un fișier bash folosim următoarea comanda:
 bash script.sh
De asemenea poate fi lansat în execuție cu comanda:
 ./script.sh
În acest caz fișierul trebuie să aibă drept de execuție. Un fișier text nu este în mod normal un fișier
executabil.
Pentru execuția scripturilor aflate în alt director decât cel curent, se va scrie calea întreagă pornind
de la rădăcină:
/home/used/script.sh

Exercițiu:
Scrieți următorul script:
#!/bin/bash
clear
echo 'Afișare calendar'
cal

S-a folosit comanda clear ce determină ștergerea display terminal și comanda cal ce determină afișarea lunii
curente.

Variabile în Shell Scripting


În shell scripting există două tipuri de variabile:
a) Variabilele sistemului, acestea sunt create și menținute de către Linux, și sunt scrise cu
majuscule;
b) Variabilele definite de către utilizator, acestea sunt scrise cu litere mici.
Disciplina: USODM Prof: Golub A.

Pentru accesarea lor, ca shell-ul să poată deosebi numele variabilei de un text simplu, când accesăm
variabilele, trebuie să punem înainte de numele lor caracterul „$”, de exemplu $variabilamea desemnează
valoarea variabilei variabilamea. Dacă ar fi numai variabilamea, fără $, shell-ul ar putea crede că este pur
şi simplu un text. Așadar, variabilele shell nu au tipuri. O variabilă poate fi evaluată atât ca număr, cât și
ca șir de caractere.
De exemplu, însuşi sistemul Unix ţine unele date despre mediu în variabile. Cele mai uzuale sunt:
 $HOME: directorul alocat la intrarea în sesiune
 $PATH: lista directoarelor unde se caută pt. execuţia unei comenzi
 $PS1: def. prompter-ul asociat utilizatorului: # - supervizor, $ - utilizator
 $USER sau $LOGNAME: numele utilizatorului
 $MAIL: numele directorului de poştă
 $SHELL: numele programului SHELL
 $TERM: tipul terminalului.

Operatorul referință $ apelează valoarea stocată în variabila respectivă, de exemplu:


# echo $USER va afișa numele utilizator și nu $USER
# echo $HOME va afișa locația curentă (/home/used) și nu $HOME

Definire variabile

Sintaxa:
nume_variabilă=valoare
Ex:
Var1=10
var2=4asaŁ
var3='abcd'
my_var="asdf"
new_var=$var1
new_var2=${var2}var3

!!! La definire variabilă nu trebuie lăsat spațiu în stânga sau dreapta semnului = .
!!! În caz contrar se produc erori.

Fie următorul script, care vă va familiariza cu modul de definire a variabilelor:


#!/bin/bash
clear
a=10
echo $a
Pentru a vizualiza valorile unor anumite variabile folosim comanda echo și referință variabilă.
Sintaxa generală a comenzii este:
#echo [opțiuni] [șir de caractere, variabile...]
echo $PATH
!!! Atenţie la numele variabilei, deoarece Linux face deosebire între literele mari şi mici.

Operații cu variabile.
Asupra variabilelor se pot efectua operații aritmetice (folosind operatori matematici) și operații
logice (folosind operatori logici).
Disciplina: USODM Prof: Golub A.

Operatorii matematici uzuali:


 + - adunarea
 – - scăderea
 * - înmulțirea
 / - împărțirea
 % - restul împărțirii
 ** - ridicare la putere
Operatori aritmetici folosiți în evaluarea expresiilor:
 -eq (este egal cu)
 -ne (nu este egal cu)
 -lt (mai mic decât)
 -le (mai mic sau egal decât)
 -gt (mai mare decât)
 -ge (mai mare sau egal decât)

Evaluarea aritmetică
Expandarea aritmetică permite evaluarea unei expresii aritmetice și substituirea ei cu rezultatul.
Există două formate pentru expandarea aritmetică: a) $[expresie] b) $((expresie))
Ex:
f=2
echo $[f+2] afișează 4
Dacă expresia este invalidă, bash-ul scrie un mesaj indicând eșecul și nu are loc nici o substituire.
Un caz particular de evaluare îl constituie comanda let a cărei sintaxă este:
let arg [arg ...]
Fiecare "arg" este o expresie aritmetică, ce trebuie evaluată. Dacă ultimul "arg" este evaluat ca fiind
0, comanda "let" întoarce 1 la ieșire; altfel, întoarce 0. Exemplu:
f=2
let f-2
echo $?
Se afișează 1
În acest exemplu s-a folosit operandul $? care este Exit Status. Exit status are 2 valori folosite
pentru a vedea dacă comanda sau scriptul au fost executate corect sau nu. Dacă valoarea returnată este 0,
atunci comanda a fost executată cu succes, iar dacă valoarea returnată este diferită de 0, atunci a apărut o
eroare în executarea comenzii sau a scriptului. Pentru a avea valoarea stării de exit, se folosește variabila
specială $?.

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