Scurtă Introducere Bash

De la Wiki.lug.ro
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[modificare]

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[modificare]

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"[modificare]

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[modificare]

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

test expresie

sau

[expresie]


Comparaţii numerice[modificare]

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[modificare]

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[modificare]

-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[modificare]

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


Blocuri logice[modificare]

If...then[modificare]

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[modificare]

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[modificare]

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

Case select[modificare]

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[modificare]

Loops[modificare]

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[modificare]

while [ expression ]
do
        commands
done

Until[modificare]

until [ expression ]
do
        commands
done

Funcţii[modificare]

Exemplu:

fname(){
        commands
}

Apelare:

fname

Exemplu funcţie cu mai multe argumente:

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

Apelare:

fname2 arg1 arg2 ... argN