Jump to content
zbeng

Variabile în shell

Recommended Posts

Î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 terminalului

Cum putem vedea continutul acestor variabile? Cu comanda echo. De exemplu, încercati comanda:

echo $PATH

Atentie la numele variabilei, deoarece Unix face deosebire între literele mari si mici.

Elemente de limbaj (bash)

#4 – Introducere valoare

echo -n "Introduceti valoarea: "

read value

echo "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 – 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

# - 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`

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

Raspuns:

Dec

Febr

1

Ce 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, …

clear

ls -l $1

echo "Ati dat comanda $0 pe $1"

Apel: ./ex0 /etc

Faptul 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 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

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"

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...