Scurtă Introducere Bash

De la Wiki.lug.ro
Versiunea din 4 septembrie 2006 16:41, autor: Lc (Discuție | contribuții)

(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)
Salt la: navigare, căutare

Articol adaptat după http://www.justlinux.com/nhf/Programming/Bash_Programming_Cheat_Sheet.html, de ph43r.

Articolul este o scurtă introducere în limbajul de scripting Bash, pentru cei care cunosc deja un alt limbaj de programare. Intenţia articolului este de a descrie într-un mod simplu şi practic sintaxa limbajului, fără a încerca să vă înveţe programare, şi fără a intra în amănunte.

Introducere

Toate scripturile bash încep cu următoarea linie de program:

#!/bin/bash

Acestă linie îi spune sistemului de operare ce interpretor să folosească. Pentru a îl rula este nevoie ca scriptul să fie executabil:

chmod +x script.sh

Variabile

Variabilele nu au un tip strict definit. O variabilă poate fi orice: string, număr, etc. Exemple:

VAR1="some string"
VAR2=9

O variabilă este accesată adăugând semnul $ în faţa ei:

echo $VAR1
echo $VAR2

Valorile pasate ca argumente scriptului sunt accesate ca $n unde n este poziţia pe linia de comandă, astfel

~/script.sh var1 var2 var3

variabila $1 este egală cu "var1", $2 cu "var2", $3 cu "var3".

Variabile built-in:

Variabila    Utilizare
$0           Numele scriptului (script.sh în exemplul de mai sus)
$1-$N        Argumentele de pe linia de comandă
$?           Valoarea de ieşire a ultimei comenzi executate
$*           Un string conţinând toate argumentele de pe linia de comandă ("var1 var2 var3" în exemplul de mai sus)
"$@"         O altă variantă a lui $* ("var1" "var2" "var3" în exemplul de mai sus).

"Ghilimele"

Ghilimelele "duble" îi spun interpretorului să ignore spaţiul liber dintre cuvinte şi să folosească stringul ca un singur argument. Caracterele speciale sunt interpretate.

Ghilimelele 'simple' îi spun interpretorului să ignore spaţiul liber dintre cuvinte şi caracterele speciale.

Ghilimelele `aflate de regulă deasupra tastei TAB` îi spun interpretorului să execute comanda pe care o delimitează iar rezultatul să-l folosească pe post de string. De exemplu dacă doriţi o listă a tuturor fişierelor din directorul curent, introduceţi o linie de program de genul:

files=`ls`

Rezultatul se găseşte în variabila files.

Teste logice şi comparaţii

Folosiţi comanda test pentru a evalua o expresie condiţională. Comanda are două forme:

test expresie

sau

[expresie]


Comparaţii numerice

int1 -eq int2 	  	returnează True dacă int1 este egal cu int2
int1 -ge int2 	  	returnează True dacă int1 este mai mare sau egal cu int2
int1 -gt int2 	  	returnează True dacă int1 este mai mare decât int2.
int1 -le int2 	  	returnează True dacă int1 este mai mic sau egal cu int2
int1 -lt int2 	  	returnează True dacă int1 este mai mic decât int2
int1 -ne int2 	  	returnează True dacă int1 nu este egal cu int2


Comparaţii de stringuri

str1 = str2 	  	returnează True dacă cele două stringuri sunt identice
str1 != str2 	  	returnează True dacă cele două stringuri nu sunt identice
str 	  		returnează True dacă str este null
-n str 	  		returnează True dacă lungimea stringului este mai mare ca zero
-z str 	  		returnează True dacă lungimea stringului este zero


Comparaţii de fişiere

-d filename 	  	returnează True dacă filename este un director
-f filename 	  	returnează True dacă filename este un fişier normal
-r filename 	  	returnează True dacă filename poate fi citit
-s filename 	  	returnează True dacă filename nu este gol
-w filename 	  	returnează True dacă filename poate fi scris
-x filename 	  	returnează True dacă filename este executabil


Expresii logice

!expression 	  	negare
expr1 -a expr2 	  	şi (se mai poate folosi &&, and)
expr1 -o expr2 	  	sau (se mai poate folosi ||, or)


Blocuri logice

If...then

if [ expression ]
        then
                commands
fi

Exemplu:

VAR2=9
if [ $VAR2 -eq 9 ]
        then
        	     echo $VAR2
fi

Folosim o comparaţie numerică, observaţi cum VAR2 este accesată ca $VAR2


If..then...else

if [ expression ]
        then
                commands
        else
                commands
fi

Exemplu:

VAR1="some other string"
if [ "$VAR1" = "some string" ]
        then
        	echo "string found"
        else
        	echo "string not found"
fi

Folosim o comparaţie de stringuri, observaţi cum VAR1 este accesată ca "$VAR1"

If..then...else If...else

if [ expression ]
        then
                commands
elif [ expression2 ]
        then
                commands
else
                commands
fi

Case select

case string1 in
        str1)
                commands;;
        str2)
                commands;;
        *)
                commands;;
esac

string1 este comparat cu str1 şi str2, comenzile respective până la semnul ;; fiind executate. Condiţia default este marcată cu *).

Iterare

Loops

for var1 in list
do
        commands
done

Aceasta execută comanads pentru fiecare element al listei list. O listă poate fi un string de câteva cuvinte separate prin spaţiu. La fiecare iteraţie variabila var1 este iniţializată cu cuvântul corespunzător din listă.

While

while [ expression ]
do
        commands
done

Until

until [ expression ]
do
        commands
done

Funcţii

Exemplu:

fname(){
        commands
}

Apelare:

fname

Exemplu funcţie cu mai multe argumente:

fname2 (arg1,arg2...argN) {
        commands
}

Apelare:

fname2 arg1 arg2 ... argN