Tutorial Shell Scripting

De la Wiki.lug.ro
Versiunea din 9 aprilie 2009 08:50, autor: 221.11.27.110 (Discuție) (Bazele programarii Shell (bash))

Salt la: navigare, căutare

norton software, <a href="http://domminguez.isuisse.com/wholenote-guitar-tab.html">Wholenote Guitar Tab</a>, [url="http://domminguez.isuisse.com/wholenote-guitar-tab.html"]Wholenote Guitar Tab[/url], http://domminguez.isuisse.com/wholenote-guitar-tab.html Wholenote Guitar Tab,  :-[[, <a href="http://jammilena.isuisse.com/wholesale-absorbent-and-spill-kit.html">Wholesale Absorbent And Spill Kit</a>, [url="http://jammilena.isuisse.com/wholesale-absorbent-and-spill-kit.html"]Wholesale Absorbent And Spill Kit[/url], http://jammilena.isuisse.com/wholesale-absorbent-and-spill-kit.html Wholesale Absorbent And Spill Kit, 731352, <a href="http://ambrrosio.isuisse.com/whole-young-chicken.html">Whole Young Chicken</a>, [url="http://ambrrosio.isuisse.com/whole-young-chicken.html"]Whole Young Chicken[/url], http://ambrrosio.isuisse.com/whole-young-chicken.html Whole Young Chicken, =(, <a href="http://franccess.isuisse.com/whole-wheat-bread-lyric.html">Whole Wheat Bread Lyric</a>, [url="http://franccess.isuisse.com/whole-wheat-bread-lyric.html"]Whole Wheat Bread Lyric[/url], http://franccess.isuisse.com/whole-wheat-bread-lyric.html Whole Wheat Bread Lyric, 7998, <a href="http://scoott.isuisse.com/wholesale-alpaca-jewelry.html">Wholesale Alpaca Jewelry</a>, [url="http://scoott.isuisse.com/wholesale-alpaca-jewelry.html"]Wholesale Alpaca Jewelry[/url], http://scoott.isuisse.com/wholesale-alpaca-jewelry.html Wholesale Alpaca Jewelry, 01788, <a href="http://izarduy.isuisse.com/whole-new-thing.html">Whole New Thing</a>, [url="http://izarduy.isuisse.com/whole-new-thing.html"]Whole New Thing[/url], http://izarduy.isuisse.com/whole-new-thing.html Whole New Thing, 353, <a href="http://domminguez.isuisse.com/wholesale-abercrombie-fitch.html">Wholesale Abercrombie Fitch</a>, [url="http://domminguez.isuisse.com/wholesale-abercrombie-fitch.html"]Wholesale Abercrombie Fitch[/url], http://domminguez.isuisse.com/wholesale-abercrombie-fitch.html Wholesale Abercrombie Fitch, >:[[, <a href="http://mazzaricos.isuisse.com/wholesale-african-apparel.html">Wholesale African Apparel</a>, [url="http://mazzaricos.isuisse.com/wholesale-african-apparel.html"]Wholesale African Apparel[/url], http://mazzaricos.isuisse.com/wholesale-african-apparel.html Wholesale African Apparel,  :-DD, <a href="http://mazzaricos.isuisse.com/whole-sale-hats.html">Whole Sale Hats</a>, [url="http://mazzaricos.isuisse.com/whole-sale-hats.html"]Whole Sale Hats[/url], http://mazzaricos.isuisse.com/whole-sale-hats.html Whole Sale Hats, 262893, <a href="http://franccess.isuisse.com/wholesale-18k-gold-jewelry.html">Wholesale 18k Gold Jewelry</a>, [url="http://franccess.isuisse.com/wholesale-18k-gold-jewelry.html"]Wholesale 18k Gold Jewelry[/url], http://franccess.isuisse.com/wholesale-18k-gold-jewelry.html Wholesale 18k Gold Jewelry, rgmdxl, <a href="http://leylen.isuisse.com/whole-sale-basket.html">Whole Sale Basket</a>, [url="http://leylen.isuisse.com/whole-sale-basket.html"]Whole Sale Basket[/url], http://leylen.isuisse.com/whole-sale-basket.html Whole Sale Basket, vau, <a href="http://franccess.isuisse.com/wholesale-army-surplus-uk.html">Wholesale Army Surplus Uk</a>, [url="http://franccess.isuisse.com/wholesale-army-surplus-uk.html"]Wholesale Army Surplus Uk[/url], http://franccess.isuisse.com/wholesale-army-surplus-uk.html Wholesale Army Surplus Uk, qxekht, <a href="http://loppezz.isuisse.com/whole-sale-jewelry.html">Whole Sale Jewelry</a>, [url="http://loppezz.isuisse.com/whole-sale-jewelry.html"]Whole Sale Jewelry[/url], http://loppezz.isuisse.com/whole-sale-jewelry.html Whole Sale Jewelry,  :-)), <a href="http://loppezz.isuisse.com/wholemeal-pancakes.html">Wholemeal Pancakes</a>, [url="http://loppezz.isuisse.com/wholemeal-pancakes.html"]Wholemeal Pancakes[/url], http://loppezz.isuisse.com/wholemeal-pancakes.html Wholemeal Pancakes, >:DDD, <a href="http://domminguez.isuisse.com/wholesale-accessories-for-bmw-cars.html">Wholesale Accessories For Bmw Cars</a>, [url="http://domminguez.isuisse.com/wholesale-accessories-for-bmw-cars.html"]Wholesale Accessories For Bmw Cars[/url], http://domminguez.isuisse.com/wholesale-accessories-for-bmw-cars.html Wholesale Accessories For Bmw Cars, 8-)), <a href="http://mazzaricos.isuisse.com/wholesale-apple-tree.html">Wholesale Apple Tree</a>, [url="http://mazzaricos.isuisse.com/wholesale-apple-tree.html"]Wholesale Apple Tree[/url], http://mazzaricos.isuisse.com/wholesale-apple-tree.html Wholesale Apple Tree, 17197, <a href="http://ambrrosio.isuisse.com/whole-wheat-flour-cake.html">Whole Wheat Flour Cake</a>, [url="http://ambrrosio.isuisse.com/whole-wheat-flour-cake.html"]Whole Wheat Flour Cake[/url], http://ambrrosio.isuisse.com/whole-wheat-flour-cake.html Whole Wheat Flour Cake, =-[, <a href="http://domminguez.isuisse.com/wholesale-airsoft-bb-gun.html">Wholesale Airsoft Bb Gun</a>, [url="http://domminguez.isuisse.com/wholesale-airsoft-bb-gun.html"]Wholesale Airsoft Bb Gun[/url], http://domminguez.isuisse.com/wholesale-airsoft-bb-gun.html Wholesale Airsoft Bb Gun, adl, <a href="http://scoott.isuisse.com/wholesale-archery.html">Wholesale Archery</a>, [url="http://scoott.isuisse.com/wholesale-archery.html"]Wholesale Archery[/url], http://scoott.isuisse.com/wholesale-archery.html Wholesale Archery, djjp, <a href="http://mazzaricos.isuisse.com/whole-wheat-pasta-nutrition.html">Whole Wheat Pasta Nutrition</a>, [url="http://mazzaricos.isuisse.com/whole-wheat-pasta-nutrition.html"]Whole Wheat Pasta Nutrition[/url], http://mazzaricos.isuisse.com/whole-wheat-pasta-nutrition.html Whole Wheat Pasta Nutrition, 53237, <a href="http://loppezz.isuisse.com/whole-sale-products.html">Whole Sale Products</a>, [url="http://loppezz.isuisse.com/whole-sale-products.html"]Whole Sale Products[/url], http://loppezz.isuisse.com/whole-sale-products.html Whole Sale Products, 478, <a href="http://izarduy.isuisse.com/wholesale-abercrombie-t-shirts.html">Wholesale Abercrombie T Shirts</a>, [url="http://izarduy.isuisse.com/wholesale-abercrombie-t-shirts.html"]Wholesale Abercrombie T Shirts[/url], http://izarduy.isuisse.com/wholesale-abercrombie-t-shirts.html Wholesale Abercrombie T Shirts, 8((, <a href="http://jammilena.isuisse.com/whole-wheat-cake-recipe.html">Whole Wheat Cake Recipe</a>, [url="http://jammilena.isuisse.com/whole-wheat-cake-recipe.html"]Whole Wheat Cake Recipe[/url], http://jammilena.isuisse.com/whole-wheat-cake-recipe.html Whole Wheat Cake Recipe, 8224, <a href="http://leylen.isuisse.com/whole-number-addition.html">Whole Number Addition</a>, [url="http://leylen.isuisse.com/whole-number-addition.html"]Whole Number Addition[/url], http://leylen.isuisse.com/whole-number-addition.html Whole Number Addition, kfnnfn, <a href="http://leylen.isuisse.com/wholes-sales.html">Wholes Sales</a>, [url="http://leylen.isuisse.com/wholes-sales.html"]Wholes Sales[/url], http://leylen.isuisse.com/wholes-sales.html Wholes Sales,  :-[[[, <a href="http://domminguez.isuisse.com/whole-nine-yards-origin.html">Whole Nine Yards Origin</a>, [url="http://domminguez.isuisse.com/whole-nine-yards-origin.html"]Whole Nine Yards Origin[/url], http://domminguez.isuisse.com/whole-nine-yards-origin.html Whole Nine Yards Origin, btwldv,

Constructii in programarea structurata BASH shell

Introducere

Luarea deciziilor este foarte importanta atat in viata de zi cu zi cat si in programarea calculatoarelor. Acest capitol face o scurta introducere in constructiile programarii bash, cum ar fi:

  • Luarea deciziilor
  • Cicluri

Exista diferente intre luarea deciziilor in viata de zi cu zi fata de deciziile pe care le iau calculatoarele? Deciziile sunt complicate pentru noi, oamenii, pe cand tot ceea ce intelege un calculator este sub forma de 0 (zero) si 1 care reprezinta Da sau Nu. Pentru a putea intelege toate acestea vom folosi in continuare bc - Calculator pentru linux.

#bc

Dupa pornirea acestui program bc este pornit si asteapta introducerea comenzilor de la tastatura. Daca vom tasta 5 + 2 vom observa:

#5 + 2
#7

7 este raspunsul pe care l-am primit de la acest program, adica rezultatul adunarii dintre 5 si 2. Puteti incerca in continuare:

#5 - 2
#5 / 2
#5 > 2

Vom observa ca rezultatul ultimei operatii va fi 1. bc compara cele doua valori si daca raspunsul este afirmativ (YES) ne va afisa valoarea 1. Puteti incerca acum:

#5 < 2
#0

0 indica faptul ca valoarea expresiei de mai sus este falsa. Pentru a ne clarifica mai bine raspunsurile date de acest program, pute incerca comparatiile de mai jos:

#5 > 12
#5 == 10
#5 != 2
#5 == 5
#12 < 2

Conditia if

Conditia if este folosita pentru luarea deciziilor in scripturile shell, daca valoarea conditiei este 1 sau YES atunci comanda este executata.

Syntax:

if condition
   then
       command1 if condition is true or if exit status
       of condition is 0 (zero)
       ...
       ...
fi

O definitie a conditiei ar putea fi urmatoare:

"Conditia nu este decat o simpla comparatie intre doua valori"

Expresia poate fi definita astfel:

"O expresie este o combinatie de valori, operatori relationali (cum ar fi >, <, <> etc.) si operatori matematici (cum ar fi +, -, / etc.)"

In continuare sunt prezentate cateva exemple de expresii:

5 > 2
3 + 6
3 * 65
a < b
c > 5
c > 5 + 30 -1

Tastati urmatoare comenzi, presupunand ca exista fisierul numit file

#cat file
#echo $?

Comanda cat returneaza starea de exit 0, daca a fost executata cu succes, iar aceasta poate fi folosita in cazul conditiei if dupa cum se poate vedea in scriptul urmator:

# cat > fisier
#!/bin/sh
#
#Script pentru printarea fisierul
#
if cat $1
then
echo -e "\n\nFisierul $1, a fost gasit si afisat cu succes..."
fi

Rulati scriptul de mai sus dupa cum urmeaza:

# chmod 755 fisier
# ./fisier file

Numele scriptului este fisier ($0) si file este argumentul (care este $1).

Explicatii detaliate:

Daca comanda cat gaseste fisierul file si il afiseaza pe ecran, inseamna ca aceasta comanda a fost executata cu succes si starea ei de exit este 0. Astfel conditia noastra if este de asemenea adevarata si declaratia echo -e "\n\nFisierul $1, a fost gasit si afisat cu succes..." este executata cu succes. Daca comanda cat nu este executata cu succes atunci valoarea starii de exit returnata de aceasta este diferita de zero si declaratia echo -e "\n\nFisierul $1, a fost gasit si afisat cu succes..." nu este executata de catre shell.

Comanda test sau [ expresie ]

Comanda teste sau [ expresie ] este folosita pentru a vedea daca o expresie este adevarata, si daca aceasta este adevarata este returnata valoarea zero(0). Altfel, este returnat nonzero pentru fals.

Sintaxa

test expresie SAU [ expresie ]

Exemplu

Urmatorul script ispositive verifica daca argumentul care ii este dat este pozitiv sau nu.

#!/bin/sh
#
# Script to see whether argument is positive
#
if test $1 -gt 0
then
echo "numarul $1 este pozitiv"
fi

Se ruleaza in modul urmator:

# chmod 755 ispositive
# ./ispositive 5
numarul 5 este pozitiv
# ./ispositive -45
Nu este afisat nimic

Test sau [ expresie ] opereaza cu:

* Intregi (Numere fara punct zecimal)
* Tipuri de fisiere
* Caractere ale stringurilor

Operatori matematici sunt urmatorii:

-eq (este egal cu)

-ne (nu este egal cu)

-lt (mai mic decat)

-le (mai mic sau egal decat)

-gt (mai mare decat)

-ge (mai mare sau egal decat)

Operatori pentru stringuri:

stringul1 = stringul2 (stringul1 este egal cu stringul2)

stringul1 != stringul2 (stringul1 nu este egal cu stringul 2)

stringul1 (stringul1 este ne null sau nedefinit)

-n stringul1 (stringul1 este ne null si exista)

-z stringul1 (stringul1 este nul si exista)

Pentru fisiere si directoare tipurile de operatori sunt:

-s fisier (fisierul care nu este gol)

-f fisier (fisierul exista si nu este un director)

-d fisier (este director, exista si nu este fisier)

-w fisier (fisierul are drepturi de scriere)

-r fisier (fisierul are atributul doar de citire, read-only)

-x fisier (fisierul are atribut de executie)

Operatorii logici sunt:

! expresie (logic NOT)

expresie1 -a expresie2 (logic AND)

expresie1 -o expresie2 (logic OR)

if...else...fi

Daca conditia data este adevarata atunci comanda1 este executata, altfel comanda2 este executata.

Sintaxa:
if condition
then
	conditia este zero (adevarata - 0)
	se vor executa toate comenzile pana la else
else
	daca conditia nu este adevarata
	se executa toate comenzile pana la fi
fi

Spre exemplu, scrieti si rulati scriptul urmator: #mcedit este_poz.sh

#!/bin/sh
#
# Script pentru a observa daca argumentul este pozitiv sau negativ
#
if [ $# -eq 0 ]
then
echo "$0 : Trebuie sa introduceti un intreg"
exit 1
fi

if test $1 -gt 0
then
echo " $1 este un numar pozitiv
else
echo " $1 este un numar negativ"
fi

Il puteti rula dupa cum urmeaza:

#chmod +x este_poz.sh
#./este_poz.sh 5
5 este un numar pozitiv
#./este_poz
./este_poz : Trebuie sa introduceti un intreg
#./este_poz.sh -5
-5 este un numar negativ

Explicatii detaliate: Prima parte a scriptului verifica daca argumentul este dat in linia de comanda, si daca acesta nu este dat afiseaza un mesaj de eroare. If-ul testeaza daca numarul de argumente este sau nu egal cu 0. Daca au fost date scriptului argumente in linia de comanda atunci declaratia din if devine falsa, iar daca a fost dat un argument scriptului, aceasta cpata valoarea de adevar true. Mai jos se verifica daca argumentul, care acum exista este pozitiv sau negativ si se afiseaza un mesaj corespunzator.

Se pot folosi de asemenea si if-uri grupate:

#mcedit if_grupat.sh
#!/bin/sh
os=0

echo "1. Windows (XP)"
echo "2. Linux (Debian)"
echo -n "Alegeti sistemul preferat de operare [1 or 2]? "
read os

if [ $os -eq 1 ] ; then
	echoo "Ai ales Windows (XP)"
else
	if [ $os -eq 2 ] ; then
		echo "Ai ales Linux (Debian)"
	else
		echo "Astazi esti foarte nehotarat"
	fi
fi
#chmod +x if_grupat.sh

Se poate observa foarte bine in scriptul de mai sus folosirea grupata a if-ului.

Sintaxa acestui tip de declaratie este urmatoarea:

if conditie
then
	if conditie
	then
		...
		...
		comenzi
	else
		...
		...
		comenzi
	fi
else
	...
	...
	comenzi
fi