Ce face Coduri de ieșire ($?, &&, ||)
Orice comandă Linux se termină cu un cod de ieșire (exit status). Prin convenție, 0 înseamnă succes, iar orice altă valoare (1-255) înseamnă eroare sau un rezultat negativ, de exemplu grep întoarce 1 când nu găsește textul. Codul ultimei comenzi stă în variabila specială $?.
Operatorul && rulează a doua comandă doar dacă prima a reușit, iar || doar dacă prima a eșuat. Funcțiile își setează codul cu return N, iar scripturile cu exit N.
Câteva coduri au sens fix: 126 (fișierul există, dar nu poate fi executat), 127 (comanda nu a fost găsită), 128+N (procesul a fost oprit de semnalul N, de exemplu 130 pentru Ctrl+C). În Bash, tabloul PIPESTATUS păstrează codurile tuturor comenzilor din ultimul pipeline.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
$? |
Codul de ieșire al ultimei comenzi. |
cmd1 && cmd2 |
Rulează cmd2 doar dacă cmd1 întoarce 0. |
cmd1 || cmd2 |
Rulează cmd2 doar dacă cmd1 întoarce un cod diferit de 0. |
return N / exit N |
Încheie funcția / scriptul cu codul N (0-255). |
${PIPESTATUS[@]} |
Codurile fiecărei comenzi din ultimul pipeline (Bash). |
true / false |
Comenzi care întorc mereu 0 / 1. |
Exemple
Exemplul 1: Codul de ieșire al lui grep
grep -q nu afișează nimic; rezultatul căutării se vede doar în cod.
grep -q "Iași" <<< "Ana locuiește în Iași"
echo "Textul a fost găsit: cod $?"
grep -q "Cluj" <<< "Ana locuiește în Iași" || echo "Textul nu a fost găsit: cod $?"
nu_exista_comanda 2>/dev/null || echo "Comandă inexistentă: cod $?"
Rezultat
Textul a fost găsit: cod 0
Textul nu a fost găsit: cod 1
Comandă inexistentă: cod 127
Exemplul 2: O funcție care întoarce un cod
Funcția răspunde prin cod, nu prin text, deci poate fi folosită direct într-un if.
este_nota_valida() {
local nota=$1
if [ "$nota" -ge 1 ] && [ "$nota" -le 10 ]; then
return 0
fi
return 1
}
for n in 9 12; do
if este_nota_valida "$n"; then
echo "$n: notă validă"
else
echo "$n: notă invalidă (cod $?)"
fi
done
Rezultat
9: notă validă
12: notă invalidă (cod 1)
Exemplul 3: Lanțuri cu && și codurile dintr-un pipeline
PIPESTATUS trebuie citit imediat după pipeline, altfel este suprascris de următoarea comandă.
mkdir -p raport && echo "Raport Iași: 12 comenzi" > raport/zi.txt && cat raport/zi.txt
false | true | true
echo "Coduri în pipeline: ${PIPESTATUS[*]}"
Rezultat
Raport Iași: 12 comenzi
Coduri în pipeline: 1 0 0
Greșeli frecvente
- Citirea lui
$?după altechosauif: valoarea este deja a comenzii noi. Salvează codul imediat:cod=$?. - Folosirea lui
a && b || cca înlocuitor pentru if/else:crulează și cândareușește, darbeșuează. exit 256saureturn -1: codurile sunt limitate la 0-255, deci 256 devine 0 (succes).
Comenzi înrudite
exit: Încheie execuția shell-ului sau a scriptului curent și transmite un cod numeric de stare sistemului.Funcții în Bash: Gruparea instrucțiunilor în blocuri reutilizabile de cod, cu variabile locale și parametri.set -euo pipefail: Face un script Bash să se oprească la prima eroare, la variabile nedefinite și la comenzi eșuate din pipeline.test, [ ] și [[ ]]: Verifică fișiere, numere și texte și întoarce codul 0 (adevărat) sau 1 (fals), folosit în if, while și cu && / ||.