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