if / else în Linux / Bash

Scripting Bash POSIX / Bash built-in

Execuția condiționată a blocurilor de comenzi pe baza codurilor de ieșire sau a testelor logice.

Sintaxă comandă
if [[ condiție ]]; then
  ...
elif [[ altă_condiție ]]; then
  ...
else
  ...
fi

Ce face if / else

Instrucțiunea if verifică dacă o comandă sau un test returnează codul de ieșire 0 (ceea ce înseamnă succes/adevărat în UNIX).

Pentru comparații de numere, verificări de existență a fișierelor și potriviri de text se folosesc parantezele drepte duble [[ ... ]] (specifice Bash, mai sigure și mai puternice decât vechiul test [ ... ] POSIX).

Opțiuni și argumente

Opțiune / Parametru Descriere
-f FISIER Adevărat dacă fișierul există și este un fișier obișnuit.
-d DIRECTOR Adevărat dacă directorul există pe disc.
-z SIR Adevărat dacă șirul este gol (lungime 0).
-n SIR Adevărat dacă șirul NU este gol.
==, != Comparație de egalitate sau inegalitate între texte (acceptă și măști/wildcards).
-eq, -ne, -lt, -gt Comparații numerice: egal (-eq), diferit (-ne), mai mic (-lt), mai mare (-gt).

Exemple

Exemplul 1: Verificarea existenței unui fișier

Testăm dacă un fișier important există înainte de a-l procesa.

touch date.csv
if [[ -f date.csv ]]; then
  echo "Fisierul date.csv exista si este valid"
else
  echo "Eroare: fisierul lipseste"
fi

Rezultat

Fisierul date.csv exista si este valid

Exemplul 2: Comparație numerică între două valori

Folosim operatorul -ge (greater than or equal).

NOTA=10
if [[ $NOTA -ge 5 ]]; then
  echo "Examen promovat!"
else
  echo "Examen picat."
fi

Rezultat

Examen promovat!

Greșeli frecvente

  • Omiterea spațiilor din interiorul parantezelor: [[conditie]] va returna eroare; este obligatoriu să lași spații: [[ conditie ]].
  • Folosirea operatorilor < sau > în [ ... ] clasic fără scăpare, ceea ce duce la redirecționarea nedorită a ieșirii către un fișier cu numele celeilalte valori.

Comenzi înrudite

  • case: Ramificare multi-opțiune bazată pe potrivirea de tipare text (pattern matching).
  • exit: Încheie execuția shell-ului sau a scriptului curent și transmite un cod numeric de stare sistemului.