--- 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 --- 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 macOS. Aproape toate exemplele de mai jos pot fi parte dintr-un script sau pot fi executate direct in linia de comanda. [Citește mai multe:](http://www.gnu.org/software/bash/manual/bashref.html) ```bash #!/bin/bash # Prima linie din script se numeste "shebang" # care spune sistemului cum să execute scriptul # http://en.wikipedia.org/wiki/Shebang_(Unix) # După cum te-ai prins deja, comentariile încep cu #. # Shebang este de asemenea un comentariu. # Exemplu simplu de hello world: echo Hello world! # Fiecare comandă începe pe o linie nouă, sau după punct și virgula ; echo 'Prima linie'; echo 'A doua linie' # Declararea unei variabile se face astfel: VARIABLE="Niște text" # DAR nu așa: VARIABLE = "Niste text" # Bash va crede că VARIABLE este o comandă care trebuie executată și va # returna o eroare pentru că nu va putea fi găsita. # Folosind variabila: echo $VARIABLE echo "$VARIABLE" echo '$VARIABLE' # 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. # 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. # Substring dintr-o variabilă echo ${VARIABLE:0:7} # Asta va returna numai primele 7 caractere din variabila. # Valoarea implicita a unei variabile: echo ${FOO:-"ValoareaImplicitaDacaFOOLipseșteSauEGoală"} # Asta functionează pentru null (FOO=), # sir de caractere gol (FOO=""), zero (FOO=0) returnează 0 # Variabile pre-existente echo "Ulima valoare returnată de ultimul program rulat: $?" echo "ID-ul procesului (PID) care rulează scriptul: $$" echo "Numărul de argumente: $#" echo "Argumentele scriptului: $@" echo "Argumentele scriptului separate în variabile: $1 $2..." # 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ă echo Salut, $NAME! # Avem obisnuita instructiune "if" # Folosește "man test" pentru mai multe informații # despre instrucținea conditionala if [ $NAME -ne $USER ] then echo "Numele tău este username-ul tău" else echo "Numele tău nu este username-ul tău" fi # 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ă" # Expresiile apar în urmatorul format echo $(( 10 + 5 )) # 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 # din directorul curent folosind comanda "ls": ls # Aceste comenzi au optiuni care le controlează execuțiă ls -l # Listează fiecare fișier și director pe o linie separată # Rezultatele comenzii anterioare pot fi # trimise următoarei comenzi drept argument # Comanda grep filtrează argumentele trimise cu sabloane. # Astfel putem vedea fiserele .txt din directorul curent. ls -l | grep "\.txt" # 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++ case "$VARIABLE" in 0) echo "Este un zero.";; 1) echo "Este un unu.";; *) echo "Nu este null";; esac # Instrucțiunea 'for' parcurge toate elementele trimise: # Conținutul variabilei $VARIABLE este printat de 3 ori for VARIABLE in {1..3} do echo "$VARIABLE" done # Buclă while: while [true] do echo "în interiorul iterației aici..." break done # De asemenea poți defini funcții # Definiție: function foo () { echo "Argumentele funcționeaza ca și argumentele scriptului: $@" echo "Si: $1 $2..." echo "Asta este o funcție" return 0 } # sau mai simplu: bar () { echo "Altă metodă de a declara o funcție" return 0 } # Invocarea unei funcții: foo "Numele meu este: " $NAME # Sunt o multime de comenzi utile pe care ar trebui să le inveți: tail -n 10 file.txt # afișează ultimele 10 linii din fișierul file.txt head -n 10 file.txt # afișează primele 10 linii din fișierul file.txt sort file.txt # sortează liniile din file.txt uniq -d file.txt # raporteaza sau omite liniile care se repetă. Cu -d le raporteaza cut -d ',' -f 1 file.txt # printează doar prima coloană inainte de caracterul "," ```