Share this page

Learn X in Y minutes

Where X=bash

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. 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:

#!/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 ","

Got a suggestion? A correction, perhaps? Open an Issue on the Github Repo, or make a pull request yourself!

Originally contributed by Max Yankov, and updated by 2 contributor(s).