2014-03-07 23:01:32 +04:00
---
category: tool
tool: bash
contributors:
- ["Max Yankov", "https://github.com/golergka"]
- ["Darren Lin", "https://github.com/CogBear"]
- ["Alexandre Medeiros", "http://alemedeiros.sdf.org"]
- ["Denis Arh", "https://github.com/darh"]
translators:
- ["Adrian Bordinc", "https://github.com/ellimist"]
lang: ro-ro
filename: LearnBash-ro.sh
---
2014-05-07 20:53:23 +04:00
Bash este numele shell-ului unix, care a fost de asemenea distribuit drept shell pentru sistemul de operare GNU si ca shell implicit pentru Linux si Mac OS X.
2014-03-07 23:01:32 +04:00
Aproape toate exemplele de mai jos pot fi parte dintr-un script sau pot fi executate direct in linia de comanda.
[Citeste mai multe: ](http://www.gnu.org/software/bash/manual/bashref.html )
```bash
#!/bin/bash
2014-05-07 20:53:23 +04:00
# Prima linie din script se numeste "shebang"
# care spune systemului cum sa execute scriptul
2014-03-07 23:01:32 +04:00
# http://en.wikipedia.org/wiki/Shebang_(Unix)
2014-05-07 20:53:23 +04:00
# Dupa cum te-ai prins deja, comentariile incep cu #.
# Shebang este de asemenea un comentariu.
2014-03-07 23:01:32 +04:00
# Exemplu simplu de hello world:
echo Hello world!
# Fiecare comanda incepe pe o linie noua, sau dupa punct si virgula ;
echo 'Prima linie'; echo 'A doua linie'
# Declararea unei variabile se face astfel:
VARIABLE="Niste text"
# DAR nu asa:
VARIABLE = "Niste text"
# Bash va crede ca VARIABLE este o comanda care trebuie executata si va
# returna o eroare pentru ca nu va putea fi gasita.
# Folosind variabila:
echo $VARIABLE
echo "$VARIABLE"
echo '$VARIABLE'
2014-05-07 20:53:23 +04:00
# Atunci cand folosesti variabila, o atribui, o exporti sau altfel,
# numele ei se scrie fara $.
2014-03-07 23:01:32 +04:00
# Daca vrei sa folosesti valoarea variabilei, atunci trebuie sa folosesti $.
# Atentie la faptul ca ' (apostrof) nu va inlocui variabla cu valoarea ei.
# Inlocuirea de caractere in variabile
echo ${VARIABLE/Some/A}
# Asta va inlocui prima aparitie a "Some" cu "A" in variabila de mai sus.
# Substring dintr-o variabila
echo ${VARIABLE:0:7}
# Asta va returna numai primele 7 caractere din variabila.
# Valoarea implicita a unei variabile:
echo ${FOO:-"ValoareaImplicitaDacaFOOLipsesteSauEGoala"}
2014-05-07 20:53:23 +04:00
# Asta functioneaza pentru null (FOO=),
# sir de caractere gol (FOO=""), zero (FOO=0) returneaza 0
2014-03-07 23:01:32 +04:00
# Variabile pre-existente
echo "Ulima valoare returnata de ultimul program rulat: $?"
echo "ID-ul procesului (PID) care ruleaza scriptul: $$"
echo "Numarul de argumente: $#"
echo "Argumentele scriptului: $@"
echo "Argumentele scriptului separate in variabile: $1 $2..."
# Citind o valoare din consola
echo "Care e numele tau?"
read NAME # Observa faptul ca nu a trebuit sa declaram o variabila noua
echo Salut, $NAME!
# Avem obisnuita instructiune "if"
2014-05-07 20:53:23 +04:00
# Foloseste "man test" pentru mai multe informatii
# despre instructinea conditionala
2014-03-07 23:01:32 +04:00
if [ $NAME -ne $USER ]
then
echo "Numele tau este username-ul tau"
else
echo "Numele tau nu este username-ul tau"
fi
# Este de asemenea si executarea conditionala de comenzi
2014-05-07 20:53:23 +04:00
echo "Intotdeauna executat" || echo "Executat daca prima instructiune esueaza"
echo "Intotdeauna executat" & & echo "Executat daca prima instructiune NU esueaza"
2014-03-07 23:01:32 +04:00
# Expresiile apar in urmatorul format
echo $(( 10 + 5 ))
# Spre deosebire de alte limbaje de programare bash este un shell - asa ca
# functioneaza in contextul directorului curent. Poti vedea fisiere si directoare
# din directorul curent folosind comanda "ls":
ls
# Aceste comenzi au optiuni care la controleaza executia
ls -l # Listeaza fiecare fisier si director pe o linie separata
2014-05-07 20:53:23 +04:00
# Rezultatele comenzii anterioare pot fi
# trimise urmatoarei comenzi drept argument
# Comanda grep filtreaza argumentele trimise cu sabloane.
# Astfel putem vedea fiserele .txt din directorul curent.
2014-03-07 23:01:32 +04:00
ls -l | grep "\.txt"
# De asemenea poti redirectiona o comanda, input si error output
python2 hello.py < "input.in"
python2 hello.py > "output.out"
python2 hello.py 2> "error.err"
# Output-ul va suprascrie fisierul daca acesta exista.
# Daca vrei sa fie concatenate poti folosi ">>"
# Comenzile pot fi inlocuite in interiorul altor comenzi folosind $( ):
2014-05-07 20:53:23 +04:00
# Urmatoarea comanda afiseaza numarul de fisiere
# si directoare din directorul curent
2014-03-07 23:01:32 +04:00
echo "Sunt $(ls | wc -l) fisiere aici."
2014-05-07 20:53:23 +04:00
# Acelasi lucru se poate obtine folosind apostrf-ul inversat ``,
# dar nu pot fi folosite unele in interiorul celorlalte asa ca modalitatea
# preferata este de a folosi $( )
2014-03-07 23:01:32 +04:00
echo "Sunt `ls | wc -l` fisiere aici."
2014-05-07 20:53:23 +04:00
# Bash foloseste o instructiune 'case' care functioneaza
# in mod similar cu instructiunea switch din Java si C++
2014-03-07 23:01:32 +04:00
case "$VARIABLE" in
0) echo "Este un zero.";;
1) echo "Este un unu.";;
*) echo "Nu este null";;
esac
# Instructiunea for parcurge toate elementele trimise:
# Continutul variabilei $VARIABLE este printat de 3 ori
for VARIABLE in {1..3}
do
echo "$VARIABLE"
done
# while loop:
while [true]
do
echo "in interiorul iteratiei aici..."
break
done
# De asemenea poti defini functii
# Definitie:
function foo ()
{
echo "Argumentele functioneaza ca si argumentele scriptului: $@"
echo "Si: $1 $2..."
echo "Asta este o functie"
return 0
}
# sau mai simplu
bar ()
{
echo "Alta metoda de a declara o functie"
return 0
}
# Invocarea unei functii
foo "Numele meu este: " $NAME
# Sunt o multime de comenzi utile pe care ar trebui sa le inveti:
tail -n 10 file.txt
# printeaza ultimele 10 linii din fisierul file.txt
head -n 10 file.txt
# printeaza primele 10 linii din fisierul file.txt
sort file.txt
# sorteaza liniile din file.txt
uniq -d file.txt
# raporteaza sau omite liniile care se repeta, cu -d le raporteaza
cut -d ',' -f 1 file.txt
# printeaza doar prima coloana inainte de caracterul ","
```