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
---
2015-10-16 15:11:51 +03:00
Bash este numele shell-ului UNIX, care a fost de asemenea distribuit drept shell pentru sistemul de operare GNU și 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.
2015-10-16 15:11:51 +03:00
[ Citește mai multe:] ( http://www.gnu.org/software/bash/manual/bashref.html)
2014-03-07 23:01:32 +04:00
` ` ` bash
#!/bin/bash
2014-05-07 20:53:23 +04:00
# Prima linie din script se numeste "shebang"
2015-10-16 15:11:51 +03:00
# care spune sistemului cum să execute scriptul
2014-03-07 23:01:32 +04:00
# http://en.wikipedia.org/wiki/Shebang_(Unix)
2015-10-16 15:11:51 +03:00
# După cum te-ai prins deja, comentariile încep cu #.
2014-05-07 20:53:23 +04:00
# Shebang este de asemenea un comentariu.
2014-03-07 23:01:32 +04:00
# Exemplu simplu de hello world:
echo Hello world!
2015-10-16 15:11:51 +03:00
# Fiecare comandă începe pe o linie nouă, sau după punct și virgula ;
2014-03-07 23:01:32 +04:00
echo 'Prima linie' ; echo 'A doua linie'
# Declararea unei variabile se face astfel:
2015-10-16 15:11:51 +03:00
VARIABLE = "Niște text"
2014-03-07 23:01:32 +04:00
2015-10-16 15:11:51 +03:00
# DAR nu așa:
2014-03-07 23:01:32 +04:00
VARIABLE = "Niste text"
2015-10-16 15:11:51 +03:00
# Bash va crede că VARIABLE este o comandă care trebuie executată și va
# returna o eroare pentru că nu va putea fi găsita.
2014-03-07 23:01:32 +04:00
# Folosind variabila:
echo $VARIABLE
echo " $VARIABLE "
echo '$VARIABLE'
2015-10-16 15:11:51 +03:00
# Atunci când folosesti variabila, o atribui, o exporți sau altfel,
# numele ei se scrie fără $.
# Daca vrei sa folosesti valoarea variabilei, atunci trebuie să folosești $.
# Atentie la faptul că ' (apostrof) nu va inlocui variabla cu valoarea ei.
2014-03-07 23:01:32 +04:00
2015-10-16 15:11:51 +03:00
# Inlocuirea de caractere în variabile
echo ${ VARIABLE /Niște/Un }
# Asta va înlocui prima apariție a "Niște" cu "Un" în variabila de mai sus.
2014-03-07 23:01:32 +04:00
2015-10-16 15:11:51 +03:00
# Substring dintr-o variabilă
2014-03-07 23:01:32 +04:00
echo ${ VARIABLE : 0 : 7 }
# Asta va returna numai primele 7 caractere din variabila.
# Valoarea implicita a unei variabile:
2015-10-16 15:11:51 +03:00
echo ${ FOO :- "ValoareaImplicitaDacaFOOLipseșteSauEGoală" }
# Asta functionează pentru null (FOO=),
# sir de caractere gol (FOO=""), zero (FOO=0) returnează 0
2014-03-07 23:01:32 +04:00
# Variabile pre-existente
2015-10-16 15:11:51 +03:00
echo " Ulima valoare returnată de ultimul program rulat: $? "
echo " ID-ul procesului (PID) care rulează scriptul: $$ "
echo " Numărul de argumente: $# "
2014-03-07 23:01:32 +04:00
echo " Argumentele scriptului: $@ "
2015-10-16 15:11:51 +03:00
echo " Argumentele scriptului separate în variabile: $1 $2 ... "
2014-03-07 23:01:32 +04:00
2015-10-16 15:11:51 +03:00
# Citind o valoare din consolă
echo "Care e numele tău?"
read NAME # Observă faptul că nu a trebuit să declarăm o variabilă nouă
2014-03-07 23:01:32 +04:00
echo Salut, $NAME !
# Avem obisnuita instructiune "if"
2015-10-16 15:11:51 +03:00
# Folosește "man test" pentru mai multe informații
# despre instrucținea conditionala
2014-03-07 23:01:32 +04:00
if [ $NAME -ne $USER ]
then
2015-10-16 15:11:51 +03:00
echo "Numele tău este username-ul tău"
2014-03-07 23:01:32 +04:00
else
2015-10-16 15:11:51 +03:00
echo "Numele tău nu este username-ul tău"
2014-03-07 23:01:32 +04:00
fi
2015-10-16 15:11:51 +03:00
# Există, de asemenea, și executarea conditională de comenzi
echo "Întotdeauna executat" || echo "Executat dacă prima instrucțiune eșuează"
echo "Întotdeauna executat" && echo "Executat dacă prima instrucțiune NU esuează"
2014-03-07 23:01:32 +04:00
2015-10-16 15:11:51 +03:00
# Expresiile apar în urmatorul format
2014-03-07 23:01:32 +04:00
echo $(( 10 + 5 ))
2015-10-16 15:11:51 +03:00
# Spre deosebire de alte limbaje de programare, bash este un shell - așa că
# funcționează in contextul directorului curent. Poți vedea fișiere și directoare
2014-03-07 23:01:32 +04:00
# din directorul curent folosind comanda "ls":
ls
2015-10-16 15:11:51 +03:00
# Aceste comenzi au optiuni care le controlează execuțiă
ls -l # Listează fiecare fișier și director pe o linie separată
2014-03-07 23:01:32 +04:00
2014-05-07 20:53:23 +04:00
# Rezultatele comenzii anterioare pot fi
2015-10-16 15:11:51 +03:00
# trimise următoarei comenzi drept argument
# Comanda grep filtrează argumentele trimise cu sabloane.
2014-05-07 20:53:23 +04:00
# Astfel putem vedea fiserele .txt din directorul curent.
2014-03-07 23:01:32 +04:00
ls -l | grep "\.txt"
2015-10-16 15:11:51 +03:00
# De asemenea, poți redirecționa date de intrare spre sau erori/date de ieșire
# dinspre o comandă
python2 hello.py < "intrare.in"
python2 hello.py > "ieșire.out"
python2 hello.py 2> "erori.err"
# Output-ul va suprascrie fișierul dacă acesta există.
# Daca vrei să fie concatenate datele poți folosi ">>" în loc de ">"
# Comenzile pot fi înlocuite în interiorul altor comenzi folosind $( ):
# Urmatoarea comandă afișează numărul de fișiere
# și directoare din directorul curent
echo " Sunt $( ls | wc -l) fișiere aici. "
# Același lucru se poate obține folosind apostroful inversat ``,
# dar nu pot fi folosite limbricate, așa ca modalitatea
# preferată este de a folosi $( )
echo "Sunt `ls | wc -l` fișiere aici."
# Bash folosește o instrucțiune 'case' care funcționeaza
# în 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
2015-10-16 15:11:51 +03:00
# Instrucțiunea 'for' parcurge toate elementele trimise:
# Conținutul variabilei $VARIABLE este printat de 3 ori
2014-03-07 23:01:32 +04:00
for VARIABLE in { 1..3}
do
echo " $VARIABLE "
done
2015-10-16 15:11:51 +03:00
# Buclă while:
2014-03-07 23:01:32 +04:00
while [ true]
do
2015-10-16 15:11:51 +03:00
echo "în interiorul iterației aici..."
2014-03-07 23:01:32 +04:00
break
done
2015-10-16 15:11:51 +03:00
# De asemenea poți defini funcții
# Definiție:
2014-03-07 23:01:32 +04:00
function foo ( )
{
2015-10-16 15:11:51 +03:00
echo " Argumentele funcționeaza ca și argumentele scriptului: $@ "
2014-03-07 23:01:32 +04:00
echo " Si: $1 $2 ... "
2015-10-16 15:11:51 +03:00
echo "Asta este o funcție"
2014-03-07 23:01:32 +04:00
return 0
}
2015-10-16 15:11:51 +03:00
# sau mai simplu:
2014-03-07 23:01:32 +04:00
bar ( )
{
2015-10-16 15:11:51 +03:00
echo "Altă metodă de a declara o funcție"
2014-03-07 23:01:32 +04:00
return 0
}
2015-10-16 15:11:51 +03:00
# Invocarea unei funcții:
2014-03-07 23:01:32 +04:00
foo "Numele meu este: " $NAME
2015-10-16 15:11:51 +03:00
# Sunt o multime de comenzi utile pe care ar trebui să le inveți:
2014-03-07 23:01:32 +04:00
tail -n 10 file.txt
2015-10-16 15:11:51 +03:00
# afișează ultimele 10 linii din fișierul file.txt
2014-03-07 23:01:32 +04:00
head -n 10 file.txt
2015-10-16 15:11:51 +03:00
# afișează primele 10 linii din fișierul file.txt
2014-03-07 23:01:32 +04:00
sort file.txt
2015-10-16 15:11:51 +03:00
# sortează liniile din file.txt
2014-03-07 23:01:32 +04:00
uniq -d file.txt
2015-10-16 15:11:51 +03:00
# raporteaza sau omite liniile care se repetă. Cu -d le raporteaza
2014-03-07 23:01:32 +04:00
cut -d ',' -f 1 file.txt
2015-10-16 15:11:51 +03:00
# printează doar prima coloană inainte de caracterul ","
2014-03-07 23:01:32 +04:00
` ` `