zbeng Posted July 19, 2007 Report Posted July 19, 2007 În shell, puteti avea si variabile. Pentru accesarea lor, ca shellul sa poata deosebi numele variabilei de un text simplu, când accesati variabilele, trebuie sa puneti înainte numelor lor caracterul „$”, de exemplu $variabilamea desemneaza valoarea variabilei variabilamea. Daca ar fi numai variabilamea, fara $, shellul ar putea crede ca este pur si simplu un text.De exemplu, însusi sistemul Unix tine unele date despre mediu în variabile. Cele mai uzuale sunt:- $HOME: directorul alocat la intrarea in sesiune- $PATH: lista directoarelor unde se cauta pt. executia unei comenzi- $PS1: def. prompter-ul asociat utilizatorului: # - supervizor, $ - utilizator- $LOGNAME: numele utilizatorului- $MAIL: numele directorului de posta- $SHELL: numele programului SHELL- $TERM: tipul terminaluluiCum putem vedea continutul acestor variabile? Cu comanda echo. De exemplu, încercati comanda:echo $PATHAtentie la numele variabilei, deoarece Unix face deosebire între literele mari si mici.Elemente de limbaj (bash)#4 – Introducere valoareecho -n "Introduceti valoarea: "read valueecho "Ati introdus: $value"#5 – Comparare de siruri: = , !=, -n (lung != 0)# –z (lung = 0)echo -n "Introduceti string1: " # -n nu trece la linie nouaread string1echo -n "Introduceti string2: "read string2if [ $string1 = $string2 ]thenecho "string1 egal cu string2"elseecho "string1 diferit de string2"fi#6 – Comparare de numere: -eq (=), -ge(>=), -le(<=),# -ne (!=), -gt (>), -lt(<)echo -n "Introduceti nr1: "read nr1echo -n "Introduceti nr2: "read nr2if [ $nr1 -eq $nr2 ]thenecho "nr1 egal cu nr2"elseecho "nr1 diferit de nr2"fi#7 – Operatori de fisiere# -d – fis. Este director# -f – fis este fisier# -s – numele are lung >0# -r – are atribut de citire# -w – are atribut de scriere# -x – are atribut de executie# - exempluif [ -d $1 ]thenecho "$1 este director"elseecho "$1 nu este director"fi#8. Operatori logici! (not), -a (and), -o (or)#9 – forfor varcrt in listdocorpdone# fac o copie a unui directormkdir copiefor filename in `ls`docp $filename copie/$filenameif [ $? -ne 0 ] # $? este valoarea returnata de cpthenecho "copierea lui $filename a esuat"fidone#10 – whilewhile exprdocorpdone# aduna primele 5 nr. parecontor=0rez=0while [ $contor -lt 5 ]docontor=`expr $contor + 1`increment=`expr $contor \* 2`rez=`expr $rez + $increment`doneecho "rez=$rez"#11 – Untiluntil exprdocorpdone#12 ifif [ expr ]theninstr1elif [ expr ]instr2elseinstr3fi# - exempluecho -n "VAR=: "read VARif [ $VAR = "Yes" ]thenecho "Val. este Yes"elif [ $VAR = "No" ]thenecho "Val. este No"elseecho "Val. invalida"fi#13 – casecase str instr1 | str2)instr1;;str3 | str4)instr2;;…*) instr3;;esac# - exemplucase $1 in01 | 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 functiiDefinitia:numefunctie () { # parametri formali: $1, $2,…corp}Apel:numefunctie pa1 pa2 …# - exempludm() {case $1 in01 | 1) echo "Ian";;02 | 2) echo "Febr";;12 | 12) echo "Dec";;*) echo "Par Inv";;esac}dm $2dm $3echo $1#-------Apel: ex16 1 12 2Raspuns:DecFebr1Ce este SHELL?Shell este numele generic pentru interpretorul de comenzi al Unix (si, implicit, Linux). Daca ati lucrat în DOS sau fereastra DOS în Windows, probabil ati dat comenzi de genul „dir”, „copy” etc. De fapt, ati lucrat în interpretorul de comenzi al DOS-ului. Adica i-ati dat comanda „dir”, pe care el a interpretat-o. Interpretorul de comenzi ce se instaleaza împreuna cu DOS este „command.com” si este în c: adica radacina sistemului (puteti instala si alte interpretoare de comenzi, de exemplu DR-DOS).„Shell” înseamna „scoica” sau „învelis” în engleza. Shell-ul este un învelis pentru sistem, o interfata între sistem si utilizator, deoarece dvs. nu trebuie sa stiti exact cum functioneaza harddiscul, reteaua sau alte periferice, puteti folosi comenzile shell-ului pentru a le accesa. Puteti porni si diferite programe din shell, acesta rezolvând problema initializarii si executiei lor.Shell-urile au evoluat prin inlantuirea într-un fisier a comenzilor pe care vrem ca shell-ul sa le interpreteze. Aceste fisiere se numesc scripturi, sau fisiere de comenzi. Daca ati vazut un fisier cu extensia „BAT”, ati vazut un fisier de comenzi DOS („BAT” semnifica faptul ca fisierul respectiv este batch file, în care comenzile se prelucreaza „în serie”, adica succesiv).#0 – Sterge ecranul, listeaza continut director apoi mesaj# parametrii: $0(numele scriptului), $1, $2, …clearls -l $1echo "Ati dat comanda $0 pe $1"Apel: ./ex0 /etcFaptul ca nu trebuie sa tastam din nou aceeasi secventa de comenzi de mai multe ori, ci le scriem într-un script si executam scriptul când avem nevoie, este util, dar nu destul. De aceea, scripturile pot contine blocuri conditionale si bucle, cum ar fi if, for, while.Aceste posibilitati fac scripturile foarte puternice, comparabile cu programe în limbaje de nivel înalt ca, de exemplu, C, compilate si linkeditate. Mai mult, în unele cazuri, sunt chiar mai bune, deoarece, pe de o parte, în limbajele de programare, este destul de complicat sa deschideti un fisier, iar pe de alta parte, scripturile nu trebuie compilate – le scrieti într-un editor de text, salvati, le dati dreptul de executie si le si puteti executa. Daca vreti sa schimbati ceva, modificati scriptul – un fisier text – si puteti sa-i dati drumul din nou. Desigur, ele nefiind programe în cod masina nativ (compilate si linkeditate), sunt mai lente, dar sunt usor de dezvoltat si adaptabile.Daca scripturile DOS (cu extensia „BAT”) sunt interesante, scripturile shell ale Unix-ului sunt adevarate programe; unii îsi fac meserie din scriere scripturilor de shell pentru Unix, si sunt platiti ca si programatorii în C sau alte limbaje de nivel înalt.#1 – Genereaza copia unui fisier inainte de editareif cp "$1" "#$1" # continua cu ramura then daca cp reusitathenjoe "$1"elseecho "Nu am putut creea copia de siguranta"fi#2 – Permite editarea unui fisier existentif test -f "$1" # sau if [ -f “$1” ]thenjoe "$1"elseecho "Fisierul $1 nu exista"fiCda test permite evaluarea oricarei expresii utilizand valoarea acelei expresii in locul codului de terminare a comenzii#3 – Suma numerelor de la 1 - 10sum=0for i in 1 2 3 4 5 6 7 8 9 10dosum=`expr $sum + $i`doneecho "Suma = $sum" Quote