Sunteți pe pagina 1din 7

Scripturi Ce este SHELL? Shell este numele generic pentru interpretorul de comenzi al Unix (i, implicit, Linux).

Dac ai lucrat n DOS sau fereastr DOS n Windows, probabil ai dat comenzi de genul dir, copy etc. De fapt, ai lucrat n interpretorul de comenzi al DOS-ului. Adic i-ai dat comanda dir, pe care el a interpretat-o. Interpretorul de comenzi ce se instaleaz mpreun cu DOS este command.com i este n c: adic rdcina sistemului (putei instala i alte interpretoare de comenzi, de exemplu DR-DOS). Shell nseamn scoic sau nveli n englez. Shell-ul este un nveli pentru sistem, o interfa ntre sistem i utilizator, deoarece dvs. nu trebuie s tii exact cum funcioneaz harddiscul, reeaua sau alte periferice, putei folosi comenzile shell-ului pentru a le accesa. Putei porni i diferite programe din shell, acesta rezolvnd problema iniializrii i execuiei lor. Shell-urile au evoluat prin inlnuirea ntr-un fiier a comenzilor pe care vrem ca shell-ul s le interpreteze. Aceste fiiere se numesc scripturi, sau fiiere de comenzi. Dac ai vzut un fiier cu extensia BAT, ai vzut un fiier de comenzi DOS (BAT semnific faptul c fiierul respectiv este batch file, n care comenzile se prelucreaz n serie, adic succesiv). #0 Sterge ecranul, listeaza continut director apoi mesaj # parametrii: $0(numele scriptului), $1, $2, clear ls -l $1 echo "Ati dat comanda $0 pe $1" Apel: ./ex0 /etc Faptul c nu trebuie s tastm din nou aceeai secven de comenzi de mai multe ori, ci le scriem ntr-un script i executm scriptul cnd avem nevoie, este util, dar nu destul. De aceea, scripturile pot conine blocuri condiionale i bucle, cum ar fi if, for, while. Aceste posibiliti 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 deschidei un fiier, iar pe de alt parte, scripturile nu trebuie compilate le scriei ntr-un editor de text, salvai, le dai dreptul de execuie i le i putei executa. Dac vrei s schimbai ceva, modificai scriptul un fiier text i
1

putei s-i dai drumul din nou. Desigur, ele nefiind programe n cod main nativ (compilate i linkeditate), sunt mai lente, dar sunt uor de dezvoltat i adaptabile. Dac scripturile DOS (cu extensia BAT) sunt interesante, scripturile shell ale Unix-ului sunt adevrate programe; unii i fac meserie din scriere scripturilor de shell pentru Unix, i sunt pltii ca i programatorii n C sau alte limbaje de nivel nalt. #1 Genereaza copia unui fisier inainte de editare if cp "$1" "#$1" # continua cu ramura then daca cp reusita then joe "$1" else echo "Nu am putut creea copia de siguranta" fi #2 Permite editarea unui fisier existent if test -f "$1" # sau if [ -f $1 ] then joe "$1" else echo "Fisierul $1 nu exista" fi Obs. Cda test permite evaluarea oricarei expresii utilizand valoarea acelei expresii in locul codului de terminare a comenzii #3 Suma numerelor de la 1 - 10 sum=0 for i in 1 2 3 4 5 6 7 8 9 10 do sum=`expr $sum + $i` done echo "Suma = $sum" Puin istorie Cei care au creat Unix, nu au vrut un shell fix, ci interschimbabil, n funcie de preferinele utilizatorilor i de scopurile pentru care se folosea shell-ul respectiv. Primul shell de Unix a fost Bourne shell, prescurtat sh. Mai trziu, Unix a ajuns de la Bell Labs i la Universitatea Berkeley din California, unde studenii au dezvoltat i mai mult shell-ul, care a nceput s arate mai mult a limbaj de programare, asemntor cu C-ul. L-au denumit C shell (pronunat sea
2

shell scoic de mare). Dei C shell era mai performant pentru unele scopuri, AT&T (de care aparinea Bell Labs) a nceput s folosesc i C shell pe sistemele sale System V destul de trziu, dat fiind faptul c AT&T nu avea ncredere ntr-un shell scris de studeni. Cei de la Free Software Foundation vroiau i ei shell-ul, dar C shell era restricionat de AT&T la vremea aceea. Totui, colecia de soft pentru Unix a celor de la FSF, colecie numit GNU (care nseamn GNU is Not Unix GNU nu este Unix), avea nevoie de un shell. Aa c i l-au scris ei: au luat Bourne shell, au luat cteva idei utile din C shell, au mai adugat cteva idei noi i voil! Aa a aprut Bourne Again shell, sau bash. AT&T, vznd c a rmas n urm cu noutile, l-a pus pe cercettorul 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. Variabile n shell n shell, putei avea i variabile. Pentru accesarea lor, ca shellul s poat deosebi numele variabilei de un text simplu, cnd accesai variabilele, trebuie s punei nainte numelor lor caracterul $, de exemplu $variabilamea desemneaz valoarea variabilei variabilamea. Dac ar fi numai variabilamea, fr $, shellul ar putea crede c este pur i simplu un text. De exemplu, nsui sistemul Unix ine unele date despre mediu n variabile. Cele mai uzuale sunt: - $HOME: directorul alocat la intrarea in sesiune - $PATH: lista directoarelor unde se caut pt. execuia unei comenzi - $PS1: def. prompter-ul asociat utilizatorului: # - supervizor, $ - utilizator - $LOGNAME: numele utilizatorului - $MAIL: numele directorului de pot - $SHELL: numele programului SHELL - $TERM: tipul terminalului Cum putem vedea coninutul acestor variabile? Cu comanda echo. De exemplu, ncercai comanda: echo $PATH Atenie la numele variabilei, deoarece Unix face deosebire ntre literele mari i mici.

Elemente de limbaj (bash) #4 echo read echo Introducere valoare -n "Introduceti valoarea: " value "Ati introdus: $value"

#5 Comparare de siruri: = , !=, -n (lung != 0) # z (lung = 0) echo -n "Introduceti string1: " # -n nu trece la linie noua read string1 echo -n "Introduceti string2: " read string2 if [ $string1 = $string2 ] then echo "string1 egal cu string2" else echo "string1 diferit de string2" fi #6 Comparare de numere: -eq (=), -ge(>=), -le(<=), # -ne (!=), -gt (>), -lt(<) echo -n "Introduceti nr1: " read nr1 echo -n "Introduceti nr2: " read nr2 if [ $nr1 -eq $nr2 ] then echo "nr1 egal cu nr2" else echo "nr1 diferit de nr2" fi #7 # -d # -f # -s # -r # -w # -x Operatori de fisiere fis. Este director fis este fisier numele are lung >0 are atribut de citire are atribut de scriere are atribut de executie

# - exemplu if [ -d $1 ] then echo "$1 este director" else echo "$1 nu este director" fi #8. Operatori logici ! (not), -a (and), -o (or) #9 for for varcrt in list do corp done # fac o copie a unui director mkdir copie for filename in `ls` do cp $filename copie/$filename if [ $? -ne 0 ] # $? este valoarea returnata de cp then echo "copierea lui $filename a esuat" fi done #10 while while expr do corp done # aduna primele 5 nr. pare contor=0 rez=0 while [ $contor -lt 5 ] do contor=`expr $contor + 1` increment=`expr $contor \* 2` rez=`expr $rez + $increment`
5

done echo "rez=$rez" #11 Until until expr do corp done #12 if if [ expr ] then instr1 elif [ expr ] instr2 else instr3 fi # - exemplu echo -n "VAR=: " read VAR if [ $VAR = "Yes" ] then echo "Val. este Yes" elif [ $VAR = "No" ] then echo "Val. este No" else echo "Val. invalida" fi #13 case case str in str1 | str2) instr1;; str3 | str4) instr2;; *) instr3;; esac

# - exemplu case $1 in 01 | 1) echo "Ian";; 02 | 2) echo "Febr";; 12 | 12) echo "Dec";; *) echo "Par Inv";; esac #14 break iesire fortata din for, while, until #15 exit <nr> - iesire fortata din script; poate returna o valoare; 0 executie cu succes #16 functii Definitia: numefunctie () { # parametri formali: $1, $2, corp } Apel: numefunctie pa1 pa2 # - exemplu dm() { case $1 in 01 | 1) echo "Ian";; 02 | 2) echo "Febr";; 12 | 12) echo "Dec";; *) echo "Par Inv";; esac } dm $2 dm $3 echo $1 #------Apel: ex16 1 12 2 Rspuns: Dec Febr 1
7

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