
Zašto automatizovati ponavljene zadatke u Linux terminalu?
Kao korisnik Linuxa, verovatno svakodnevno izvršavate naredbe koje možete objediniti u jednu shell skriptu. Automatizacijom štede se vreme i smanjuje broj grešaka koje nastaju pri ručnom unosu komandi. Vi dobijate konzistentnost izvršavanja, lakše logovanje aktivnosti i mogućnost raspoređivanja zadataka pomoću cron‑a ili systemd timer‑a.
Ovaj vodič će vas provesti kroz osnovne koncepte i praktične korake koje trebate znati pre nego što počnete pisati skripte: kako strukturirati skriptu, kojim pravilima se pridržavati da bi bila prenosiva i bezbedna, te kako je učiniti izvršnom i integrisati u postojeće radne tokove.
Osnovni elementi shell skripte koje treba savladati
Pre nego što napišete složene skripte, upoznajte se s nekoliko ključnih elemenata koji čine skriptu čitljivom i pouzdanom:
- Shebang: prva linija (npr.
#!/bin/bash) govori koji interpreter će izvršavati skriptu. - Komentari: koristite
#za objašnjenja; pomažu pri održavanju i razumevanju skripte kasnije. - Promenljive: čuvaju vrednosti koje ponovo koristite (npr.
DIR=/var/backups). - Ulaz/izlaz i redirekcija:
>,>,2>&1i pipe (|) su ključni za kombinovanje komandi. - Kontrola toka:
if,for,whileicaseomogućavaju logiku u skripti. - Provera grešaka: koristite
set -e, provere exit koda ($?) i jasno rukovanje greškama.
Dobro je usvojiti i princip “least privilege”: izvršavajte skripte s minimalnim potrebnim pravima, posebno kad manipulišete fajlovima sistema ili korisničkim podacima.
Kako pripremiti okruženje i napisati svoju prvu skriptu
Koraci za brzo pokretanje prve skripte su jednostavni i praktični:
- Napravi fajl, npr.
~/bin/mojaskript.sh. - Dodaj shebang:
#!/bin/bashili#!/usr/bin/env bashza veću prenosivost. - Napiši jednostavne komande i komentare unutar fajla.
- Učini fajl izvršnim:
chmod +x ~/bin/mojaskript.sh. - Pokreni ga:
./mojaskript.shili iz pune putanje.
Dok pišete prve skripte, testirajte ih postepeno: dodajte jednu funkcionalnost, izvršite i proverite logove ili ispis grešaka. Ovo će vam pomoći da brzo izolujete i otklonite probleme.
U sledećem delu pokazaću vam konkretne primere skripti koje rešavaju uobičajene zadatke — pravljenje rezervnih kopija, automatsko ažuriranje sistema i čišćenje privremenih fajlova — sa objašnjenjima svake linije koda i sugestijama za prilagođavanje vašem okruženju.
Skriptа za pravljenje rezervne kopije direktorijuma
Primer jednostavne, ali robusne skripte koja pravi tar.gz arhivu od zadatog direktorijuma, čuva je u folderu za bekap i rotira starije arhive (čuva samo poslednjih N kopija).
#!/bin/bash
# Pravljenje rezervne kopije sa rotacijom
set -euo pipefail
SRC="/home/korisnik/projekat"
DEST_DIR="/var/backups/projekat"
KEEP=7
TIMESTAMP=$(date +%F_%H-%M-%S)
ARCHIVE="${DEST_DIR}/projekat_${TIMESTAMP}.tar.gz"
LOG="/var/log/backup_projekat.log"
mkdir -p "${DEST_DIR}"
tar -czf "${ARCHIVE}" -C "$(dirname "${SRC}")" "$(basename "${SRC}")"
echo "$(date +%F_%T) - Kreiran ${ARCHIVE}" >> "${LOG}"
# Rotacija: obriši starije od KEEP
ls -1t "${DEST_DIR}"/projekat_*.tar.gz | tail -n +$((KEEP+1)) | xargs -r rm --
Objašnjenje ključnih delova:
set -euo pipefail– bezbedniji režim: prekida na grešku, tretira nedefinisane promenljive kao grešku i propisno prenosi greške kroz pipe.TIMESTAMP– dodaje vremensku oznaku kako bi arhive bile jedinstvene.tar -czf– pravi kompresovanu arhivu;-Cpomaže da arhiva nema apsolutne putanje.- Rotacija sa
ls -1titail– čuva samo poslednjih N arhiva, ostale briše.
Saveti za prilagođavanje: promenite lokaciju DEST_DIR na eksterni disk ili mrežni share; dodajte verifikaciju (npr. tar -tzf) pre brisanja starih fajlova; koristite rsync za sinhronizaciju na drugo mesto.

Automatsko ažuriranje sistema (primer za Debian/Ubuntu)
Jednostavna skripta za dnevno ili sedmično pokretanje ažuriranja, sa logovanjem i opcijom za “suvo pokretanje”—korisno pre nego što automatizujete u produkciji.
#!/bin/bash
# Ažuriranje paketa sa logovanjem
set -euo pipefail
LOG="/var/log/auto_update.log"
DRY_RUN=false
if [ "${1:-}" = "--dry" ]; then
DRY_RUN=true
fi
echo "$(date +%F_%T) - Pokretanje ažuriranja (dry=${DRY_RUN})" >> "${LOG}"
sudo apt update >> "${LOG}" 2>&1
if [ "${DRY_RUN}" = true ]; then
apt list --upgradable >> "${LOG}" 2>&1
else
sudo DEBIAN_FRONTEND=noninteractive apt -y upgrade >> "${LOG}" 2>&1
fi
echo "$(date +%F_%T) - Završeno" >> "${LOG}"
Napomene:
- Koristite
--dryza pregled bez instalacije. - Za serverska okruženja razmotrite
unattended-upgradesumesto vlastitih skripti ili kombinujte skriptu sa restart politikom (npr. obavesti admina ako je kernel update). - Uvek testirajte u staging okruženju pre automatskog izvršavanja.
Čišćenje privremenih fajlova i prostora na disku
Primer koji briše stare fajlove iz /tmp i korisničkih cache direktorijuma, uz opciju suvo pokretanje i log grešaka. Pažnja: pre brisanja proverite da ne uklonite aktivne procese.
#!/bin/bash
# Brisanje fajlova starijih od 7 dana
set -euo pipefail
TARGETS=("/tmp" "$HOME/.cache")
DAYS=7
DRY_RUN=false
if [ "${1:-}" = "--dry" ]; then
DRY_RUN=true
fi
for dir in "${TARGETS[@]}"; do
if [ "${DRY_RUN}" = true ]; then
find "$dir" -type f -mtime +"${DAYS}" -print
else
find "$dir" -type f -mtime +"${DAYS}" -delete
fi
done
Sugestije: prilagodite DAYS i TARGETS prema vašim potrebama; koristite -maxdepth da ograničite pretragu; razmislite o sigurnijem brisanju (premestite fajlove u karantin pre finalnog brisanja) ako skripta radi na delikatnim serverima.
Praktični saveti za dalje
Automatizacija skriptama najbolje se usavršava kroz male, ponovljive korake: počnite sa jednostavnim zadacima, dodajte logovanje i suvo pokretanje, zatim postepeno uvodite rotaciju, notifikacije i bezbednosne provere. Verzionišite skripte (git), koristite lint alate kao što je ShellCheck i testirajte promene u staging okruženju pre produkcije. Za detaljnije reference o Bash sintaksi i mogućnostima pogledajte GNU Bash Reference Manual.
- Koristite set -euo pipefail i trap za čišćenje resursa.
- Pokretanje u “dry-run” režimu pre promena smanjuje rizik.
- Automatizujte raspoređivanje sa cron ili systemd timer-ima, ali pratite rezultate kroz logove i obaveštenja.
- Držite osetljive podatke van samih skripti i ograničite pristup fajlovima.

Frequently Asked Questions
Kako bezbedno testirati shell skripte pre pokretanja u produkciji?
Koristite “dry-run” opciju ako je dostupna, pokrenite skriptu u izolovanom/staging okruženju, uključite set -euo pipefail i trap za hvatanje grešaka, i proverite sintaksu sa shellcheck ili sh -n. Verzija i logovi su od pomoći pri reprodukciji grešaka.
Kako da rasporedim skripte za automatsko izvršavanje?
Najjednostavnije je koristiti cron (crontab -e) za periodične zadatke. Za složenije potrebe i bolju integraciju sa systemd servisima, koristite systemd timer-e. Uvek usmerite izlaz i greške u log fajl i dodajte mehanizme za obaveštavanje u slučaju neuspeha.
Gde čuvati osetljive podatke (lozinke, API ključeve) koje skripte koriste?
Ne hardkodujte lozinke u skripte. Koristite environment varijable, konfiguracione fajlove sa restriktivnim permisijama (chmod 600) ili menadžere tajni kao što su HashiCorp Vault ili cloud provajderi. Razmotrite i korišćenje sudoers pravila umesto pokretanja skripti kao root.
Praćenje, debagovanje i notifikacije
Kako skripte postanu deo proizvodnog toka, važno je uvesti mehanizme koji olakšavaju praćenje, debagovanje i obaveštavanje. Dobar pristup uključuje strukturisano logovanje (timestamp + nivo poruke), slanje kritičnih obaveštenja preko e‑maila ili webhookova i integraciju sa sistemima za praćenje.
Osnovne preporuke koje brzo podižu pouzdanost skripti:
- Koristite journald ili rotirajuće log fajlove (/var/log) i logrotate za kontrolu veličine logova.
- Implementirajte trap za hvatanje signala i čišćenje (trap ‘cleanup_function’ EXIT INT TERM).
- Vrativši smislen exit kod (>0) omogućavate orkestratorima i monitoring sistemima da detektuju neuspehe.
- Koristite mehanizme za sprečavanje paralelnog izvršavanja (flock, lockfile, PID fajl) kako biste izbegli konflikte.
- Dodajte retry logiku sa eksponencijalnim backoff‑om za mrežne operacije.
Za debagovanje držite “verbose” režim (set -x) koji se uključuje samo u testiranju ili na zahtev, i obavezno filtrirajte osetljive podatke iz logova pre slanja u centralizovani sistem. Razmislite o automatskom pokretanju testova za skripte koristeći alate kao što je Bats, i o integraciji sa CI (GitLab CI, GitHub Actions) da bi svaka izmena bila testirana i proverena pre primene.
Distribucija i verzionisanje
- Držite skripte u VCS (git) i koristite tagove za verzije.
- Za širu upotrebu, instalirajte ih u usr/local/bin i dokumentujte u README ili man stranici.
