Gym
lesson

Exit kodovi i lancane komande

Cilj ucenja: Nakon ove lekcije razumes sta je exit kod, kako ga proveris pomocu $?, i kako koristis &&, || i ; da lancas komande na osnovu toga da li su uspele ili ne.


Sta je exit kod?

Kada komanda zavrsi s radom, vraca exit kod (izlazni kod) — broj koji govori shellu da li je uspela ili ne.

Konvencija je jednostavna:

Exit kod Znacenje
0 Uspeh
1–255 Greska (razlicit broj za razlicit tip greske)

Napomena: Ovo je suprotno od onoga na sta si mozda navikao/la u programiranju, gde je 0 obicno "false". U shellu, 0 je uspeh (true), a svaki drugi broj je greska (false).


Kako proveriti exit kod — $?

Promenljiva $? uvek sadrzi exit kod poslednje pokrenute komande. Mozes je procitati odmah posle komande:

ls /home
echo $?
student
0

0 znaci uspeh. Probaj sa nepostojucim direktorijumom:

ls /nepostoji
echo $?
ls: cannot access '/nepostoji': No such file or directory
2

2 znaci greska — ls je vratio nenulti kod jer direktorijum ne postoji.

Svaki put kada pokrenes echo $?, vraca exit kod prethodne komande. Ako pokrenes echo $? dva puta zaredom, drugi ce prikazati exit kod prvog echo (obicno 0):

ls /nepostoji
echo $?     # 2 (exit kod od ls)
echo $?     # 0 (exit kod od prvog echo)

Operator && — pokreni sledecu samo ako uspe

Operator && (AND) pokrece drugu komandu samo ako prva vrati exit kod 0 (uspeh).

mkdir backup && cp vazno.txt backup/
  • Ako mkdir backup uspe (exit 0) → cp se pokrece
  • Ako mkdir backup ne uspe (exit != 0) → cp se ne pokrece

Zasto je ovo korisno? Sprecavas greske koje bi se desile ako bi prethodna komanda pala. Na primer, nema smisla kopirati u direktorijum koji nije uspesno kreiran.

Vise primera:

apt-get update && apt-get upgrade
# Upgrade se radi samo ako je update prosao

cd /opt/projekat && ./build.sh
# build.sh se pokrece samo ako smo uspesno usli u direktorijum

Operator || — pokreni sledecu samo ako padne

Operator || (OR) pokrece drugu komandu samo ako prva vrati nenulti exit kod (greska).

mkdir backup || echo "Direktorijum vec postoji ili nema dozvole"
  • Ako mkdir backup uspe → echo se ne pokrece
  • Ako mkdir backup padne → echo se pokrece i prikazuje poruku

Korisno za fallback akcije i jasne poruke o greskama:

ping -c1 8.8.8.8 &>/dev/null || echo "Upozorenje: nema pristupa internetu"
# Poruka se prikazuje samo ako ping nije uspeo

Operator ; — pokreni uvek, bez obzira na ishod

Tacka-zarez ; razdvaja komande koje se izvrsavaju sekvencijalno, bez obzira na exit kod:

date ; whoami ; pwd
sre maj  7 12:34:56 UTC 2026
student
/home/student

Sve tri komande se pokrecu jedna za drugom, bez provere da li je prethodna uspela. Za razliku od &&, ovde greska prve ne zaustavlja ostatak.


Prakticne upotrebe

Bezbedno brisanje — obrisati fajl samo ako postoji:

[ -f bekap.txt ] && rm bekap.txt

[ -f bekap.txt ] je test koji vraca 0 ako fajl postoji, ili 1 ako ne postoji. rm se pokrece samo ako fajl stvarno postoji.

Provera mreze sa porukom o stanju:

ping -c1 8.8.8.8 &>/dev/null && echo "Mreza OK" || echo "Nema mreze"
  • Ako ping uspe → "Mreza OK"
  • Ako ping padne → "Nema mreze"

Cest izvor zabune

&& nije isto sto & — Jedan & pokrece komandu u pozadini (background). Dva && su logicki AND koji proverava exit kod. Nemoj ih mesati.

komanda &     # pokreni u pozadini (ne cekaj da zavrsi)
komanda1 && komanda2   # pokreni komandu2 samo ako komanda1 uspe

|| se aktivira kad god exit kod nije 0 — ne samo kad je tacno 1. Razlicite komande vracaju razlicite nenulte kodove za razlicite greske; || reaguje na sve njih.


Rezime

Operator Znacenje Pokreni sledecu kad...
&& AND Prethodna uspela (exit 0)
|| OR Prethodna pala (exit != 0)
; Sekvenca Uvek (bez obzira na exit kod)
$? Exit kod — (promenljiva, ne operator)