Scurtă Introducere Bash
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.
Cuprins
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