- Naučite strukturu, sintaksu i ključne naredbe kako biste kreirali robusne i prenosive Bash skripte.
- Ovladajte varijablama, nizovima, uslovnim izrazima, petljama, funkcijama, ulazno/izlaznim operacijama i cronom za automatizaciju zadataka iz stvarnog svijeta.
- Primjenjujte dobre prakse otklanjanja grešaka i koristite interne varijable i eksterne alate poput ShellCheck-a.
- Integrirajte Bash okvire i kolekcije uslužnih programa kako biste dodali grafički korisnički interfejs, konkurentnost i napredne funkcije svojim skriptama.
Ako svakodnevno radite s Linuxom - bilo da upravljate serverima , petljate se s kontejnerima ili razvijate aplikacije - savladavanje bash skriptiranja je vjerovatno vještina koja će vam uštedjeti najviše vremena. Uz nekoliko tekstualnih datoteka i malo mašte, možete automatizirati sve, od sigurnosnih kopija do složenih implementacija, kao i rutinskih zadataka koje trenutno obavljate ručno, a da toga niste ni svjesni.
U ovom vodiču ćemo detaljno i temeljito pogledati kako koristiti bash skripte i kolekcije uslužnih programa za transformaciju vaših skripti iz jednostavnih, osnovnih naredbi u zaista profesionalne alate. Počet ćemo s osnovama ljuske, pokriti bitne naredbe, kontrolne strukture, funkcije, nizove, debugging, cron i još mnogo toga. Također ćemo istražiti neke repozitorije funkcija i Bash GUI-je koji će vaše skripte podići na viši nivo.
Šta je Bash i zašto je toliko koristan za automatizaciju?

Bash (Bourne Again Shell) je najrašireniji interpreter komandi na Unix-sličnim sistemima: velika većina Linux distribucija ga uključuje kao svoju zadanu ljusku, a može se naći i na macOS-u i Windowsu putem WSL ili Git Bash terminala. To je i interaktivni interfejs i skriptni jezik.
Kada otvorite terminal, Bash prikazuje prompt gdje možete kucati naredbe. Svaka naredba obično slijedi strukturu argumenti naredbe . Sve što znate kako uraditi "ručno" u terminalu može se staviti u tekstualnu datoteku za masovno izvršavanje.
Bash skripta je jednostavno tekstualna datoteka koja sadrži listu naredbi koje shell izvršava jednu za drugom. To je magija: umjesto da kucate 10 naredbi svaki dan, vi ih sačuvate, date im dozvole za izvršavanje i pokrenete ih u jednom koraku. Nadalje, možete dodati varijable, uvjete, petlje i funkcije za donošenje odluka, ponavljanje zadataka i enkapsulaciju logike.
Bash također prati klasičnu Unix filozofiju: mnogo malih alata koji jednu stvar rade vrlo dobro i kombinovani su sa cijevima (pipes) . Sa jednom skriptom možete povezati find, grep, sed, awk, tar, gzip , ssh, scp i bilo koji drugi sistemski uslužni program kako biste kreirali vrlo moćne procese administracije i održavanja.
Osnovni koncepti shell-a i skriptiranja u Bashu
Da bismo u potpunosti razumjeli Bash skriptiranje, potrebno je razlikovati dva koncepta: ljusku (shell) i samo skriptiranje . Ljuska (shell) je program koji interpretira naredbe, a skriptiranje je proces grupiranja tih naredbi u izvršnu datoteku.
Tipična skripta uvijek počinje posebnom linijom koja se zove shebang . Ova prva linija govori sistemu koji interpreter treba koristiti za izvršavanje datoteke. Obično ćete vidjeti nešto poput ovoga:
#!/bin/bash
Također možete koristiti `#!/usr/bin/env bash` da bi sistem tražio Bash u PATH-u. Ovo pruža veću fleksibilnost ako putanja do izvršne datoteke nije baš `/bin/bash`, što se ponekad događa u egzotičnijim okruženjima.
Skripte se uglavnom spremaju s ekstenzijom .sh (radi jasnoće, ne zato što je obavezna) i morate im dati dozvolu za izvršavanje pomoću `chmod +x script_name.sh` . Odatle ih možete pokrenuti pomoću `./ script_name.sh` ili direktnim pozivanjem bash.
bash nombre_script.sh
./nombre_script.sh
Također je važno razumjeti koncepte stdin, stdout i stderr : standardni ulaz (tastatura ili šta god na šta ga preusmjeravate), standardni izlaz (ekran) i izlaz greške. Poznavanje preusmjeravanja i kombinovanja ovih tokova podataka ključno je za pisanje čistih i jednostavnih skripti za otklanjanje grešaka.
Prave prednosti korištenja Bash skripti u svakodnevnom životu

Korištenje Basha za automatizaciju nije samo hir administratora stare škole; ima vrlo jasne prednosti. Pomoću jedne datoteke možete pakirati duge nizove naredbi i pokretati ih onoliko puta koliko želite, konzistentno i bez grešaka.
Prva velika prednost je automatizacija . Umjesto ručnog ponavljanja koraka svaki put kada implementirate aplikaciju ili kreirate sigurnosnu kopiju, sve pišete u skripti i pokrećete je kada je potrebno (ili zakazujete pomoću crona). Manje ručnog rada, manje glupih grešaka.
Još jedna važna prednost je prenosivost . Sve dok su komande koje koristite dostupne, vaš skript će raditi na bilo kojoj Linux distribuciji, macOS-u ili čak Windowsu sa Bash okruženjem. Ovo olakšava migraciju mnogih zadataka između okruženja.
Skripte su također vrlo transparentne : to je samo običan tekst. Bilo ko ih može otvoriti, vidjeti šta rade i prilagoditi ih. Ne morate ništa kompajlirati niti dešifrirati binarne datoteke. A ako ih kombinujete s Gitom, dobijate besplatnu kontrolu verzija i reviziju promjena.
Konačno, učenje Basha je relativno lako. Ako znate kako se koristiti terminalom i imate osnovno razumijevanje programiranja (varijable, if naredbe, petlje), brzo ćete se snaći. A povrat uloženog vremena je ogroman u smislu produktivnosti.
Kreiranje i osnovna struktura Bash skripte
Kreiranje vašeg prvog skripta je gotovo trivijalno, ali je najbolje to uraditi od samog početka. Minimalni kostur Bash skripte bi uključivao shebang, informativne komentare, tijelo skripte i kontrolirani izlaz.
Uobičajeni način za početak je sa:
#!/bin/bash
# Descripción: pequeño script de ejemplo
echo "Hola, mundo"
Iako se može činiti trivijalnim, uvijek je dobra ideja na početku dokumentirati šta skripta radi, koje parametre očekuje i brz primjer korištenja. Ove informacije se mogu dodati komentarima , koji u Bashu počinju sa # i interpreter ih potpuno ignorira.
Nakon zaglavlja pišete logiku: definicije varijabli, čitanje ulaza, pozive naredbi, funkcije, petlje, uvjetne izraze … sve što vam je potrebno za automatizaciju zadatka.
Još jedan važan detalj je prekid skripte vraćanjem konzistentnog izlaznog koda, kao što je `exit N` . Kod 0 znači uspjeh, a bilo koja druga vrijednost označava grešku. Ova vrijednost se može provjeriti izvana pomoću `$?` , što vam omogućava lančano povezivanje skripti i reagovanje na greške.
Komentari, varijable i tipovi podataka u Bashu
Komentari su vaši prijatelji : korisni su za objašnjenje šta dio skripte radi, zašto je donesena neka odluka ili šta će ta čudna petlja uraditi za šest mjeseci kada ste je potpuno zaboravili. Kao i u mnogim jezicima, u Bashu počinju sa # i idu na kraj reda.
Što se tiče varijabli , Bash je vrlo popustljiv: nema formalnih tipova, sve je string, a shell odlučuje hoće li nešto interpretirati kao broj kada ga to zatražite. Da biste dodijelili vrijednost, koristite `naziv=vrijednost` bez razmaka oko znaka jednakosti.
pais="España"
numero=42
Da biste pročitali sadržaj varijable, ispred nje stavite znak $ : na primjer, $country . Ako želite veću jasnoću ili spajanje složenih tekstova, poželjno je koristiti znak ${country} za pravilno razgraničenje.
Budite oprezni s navodnicima . S dvostrukim navodnicima, Bash interpretira varijable i neke posebne nizove ( "$var", "\n" ). S jednostrukim navodnicima, sav sadržaj se tretira kao doslovni tekst: '$var' se ispisuje kakav jeste, bez proširenja.
Postoje i posebne varijable za rukovanje argumentima i kontekstom: $# (broj argumenata), $0 (naziv skripte), $1, $2… (pozicijski argumenti), $? (izlazni kod posljednje naredbe), $$ (PID procesa), između mnogih drugih koje je korisno imati na raspolaganju.
Ulaz i izlaz u Bash skriptama
Koristan skript rijetko postoji sam: obično traži podatke od korisnika, čita iz datoteka, obrađuje logove ili zapisuje rezultate na disk. Za ovo vam je potrebno dobro razumijevanje naredbi `read`, `echo` i preusmjeravanje.
Najjednostavniji način da se pročita nešto što korisnik upiše je pomoću naredbe read :
echo "Introduce tu nombre:"
read nombre
echo "Hola, $nombre"
Za ispis teksta na standardni izlaz koristimo `echo` ili `printf` . `echo` je jednostavniji i brži za pisanje, dok vam `printf` daje potpunu kontrolu nad formatiranjem (poravnanje, decimalna mjesta, itd.). Također možete preusmjeriti bilo koji izlaz u datoteku pomoću `>` (prepiši) ili `>>` (dodaj).
Na primjer, da biste sačuvali "Zdravo svijete" u datoteku:
echo "Hola mundo" > hola.txt
Ili da dodate redove bez brisanja prethodnih:
echo "Otra línea" >> hola.txt
Ako želite odvojiti normalan izlaz od grešaka, zapamtite da je stdout deskriptor 1 , a stderr deskriptor 2. Možete ih poslati u različite datoteke ili ih čak odbaciti u /dev/null ako vam nisu potrebni.
comando 1>salida.txt 2>errores.txt
comando >/dev/null 2>&1
Osnovne Bash komande za skriptovanje
Svaka Bash skripta se oslanja na skup osnovnih sistemskih komandi . Vjerovatno mnoge od njih koristite svakodnevno, ali je važno razumjeti njihovu sintaksu kada ih koristite u skriptama: pogrešno postavljen razmak ili neobična putanja mogu srušiti cijeli vaš proces.
Za navigaciju sistemom imate `pwd` (prikazuje trenutni direktorij) i `cd` (mijenja foldere). Za prikaz sadržaja koristite `ls` sa njegovim mnogim opcijama. Kreirajte direktorije sa `mkdir` , brišite datoteke sa `rm` (vrlo pažljivo), a premještajte/kopirajte datoteke sa `mv` i `cp`.
Tipične naredbe za pregled teksta uključuju `cat` (prikazuje datoteke), `tac` (obrće), `head` , `tail` i alate za filtriranje kao što su `grep` , `sed` i `awk` . Oni čine osnovu za kreiranje skripti koje analiziraju logove, izvode masovne zamjene ili izdvajaju određene podatke.
Na nivou sistema, vrijedi znati `ps` i `top` za procese, `kill` za prekidanje procesa, `df` i `du` za prostor na disku i `systemctl` za upravljanje servisima na sistemima sa systemd-om. Sve ove naredbe su prirodno integrirane u skripte.
Konačno, ne zaboravite `man` : priručnik. Na gotovo svako pitanje o opcijama i ponašanju naredbi može se odgovoriti naredbom `man` . Biti u stanju tečno čitati stranicu priručnika je pola bitke da postanete administrator.
Kontrolne strukture: uvjeti i petlje
Kako vaši skriptovi budu malo rasli, trebat će vam za donošenje odluka i ponavljanje radnji. Tu dolaze do izražaja kontrolne strukture : if/else, case, while, until i for.
Klasični uslov u Bashu koristi `if` zajedno sa `[ ] ` za procenu uslova. Na primer, da biste proverili da li je broj veći od 10:
read num
if ]; then
echo "El número es mayor a 10"
else
echo "El número es menor o igual a 10"
fi
Sintaksa ] je modernija i sigurnija od , te omogućava praktičnije logičke operatore i poboljšano rukovanje stringovima. Za nekoliko unaprijed definiranih slučajeva, veličina slova "case" je vrlo čitljiva, posebno kada imate više očekivanih vrijednosti:
read n
case $n in
101) echo "Primer número" ;;
510) echo "Segundo número" ;;
999) echo "Tercer número" ;;
*) echo "Sin coincidencias" ;;
esac
U odjeljku o petljama, `while` se ponavlja sve dok je uslov ispunjen, `until` radi suprotno (ponavlja se dok uslov ne postane tačan), a `for` se koristi za iteraciju kroz liste, nizove ili numeričke opsege. Na primjer, petlja `for` za iteraciju kroz dane u sedmici:
for dia in Lunes Martes Miércoles Jueves Viernes Sábado Domingo; do
echo "Día: $dia"
done
I tipična while petlja sa internim brojačem:
i=0
while ]; do
echo $i
((i++))
done
Funkcije u Bashu: ponovna upotreba logike bez pretjeranog korištenja
Funkcije u Bashu vam omogućavaju da grupišete naredbe i ponovo ih koristite onoliko puta koliko želite, što vaš skript čini mnogo čistijim i lakšim za upravljanje. Iznad određene veličine, ako ne koristite funkcije, završit ćete s čudovištem koje je teško održavati.
Mogu se deklarisati na dva ekvivalentna načina:
hola() {
echo "Hola desde una función"
}
function hola2 {
echo "Hola también"
}
Da biste ih pozvali, jednostavno napišite njihova imena u liniji kao da su bilo koja druga naredba. One se ne izvršavaju samo zato što su definirane, zato ne zaboravite da ih pozovete iz tijela skripte.
Funkcije primaju pozicijske parametre potpuno isto kao i skripta: unutar funkcije koristite $1, $2, $# itd. Možete vratiti numerički kod sa return N (namijenjen za označavanje uspjeha ili greške) i globalne varijable za vraćanje bogatijih rezultata kao što su stringovi ili nizovi.
Osim toga, varijable možete označiti kao lokalne unutar funkcije kako ne bi "kontaminirale" ostatak skripte. Ovo se toplo preporučuje kako biste izbjegli slučajno prepisivanje globalnih vrijednosti.
Nizovi i rukovanje tekstom u Bashu
Iako Bash nije dizajniran za složena izračunavanja, on dovoljno dobro obrađuje nizove i operacije sa stringovima za mnoge automatizirane zadatke. Poznavanje njihove upotrebe uveliko proširuje ono što možete učiniti sa samo nekoliko naredbi.
Jednostavan niz je definiran na sljedeći način:
frutas=(Pera Manzana Plátano)
Pojedinačnim elementima pristupate sa ${fruits} , sve ih dobijate sa ${fruits} , broj elemenata sa ${#fruits} , a korištene indekse sa ${!fruits} . Potonje je korisno kada postoje "praznine" u nizu i želite iterirati samo preko validnih pozicija.
Za iteraciju kroz cijeli sistem, možete koristiti for petlju na indeksima:
for i in ${!frutas}; do
echo "frutas = ${frutas}"
done
Bash podržava nekoliko ugrađenih operacija na tekstualnim stringovima : dužina ( ${#str} ), podstringovi ( ${str:N:M} ), zamjene ( ${str/ant/new} , ${str//ant/new} ), skraćivanje prefiksa i sufiksa ( ${str#text} , ${str%text} ), itd. Ovi alati eliminiraju potrebu za korištenjem sed ili awk za jednostavne zadatke.
Za ozbiljniju manipulaciju tekstom - na primjer velike logove ili tabelarne podatke - trebat će vam grep, sed, awk, cut i slično, koje možete povezati u lančane cijevi ili integrirati direktno u Bash funkcije.
Dozvole, izvršavanje i cron: od samostalne skripte do zakazanog zadatka
Nakon što napišete skriptu, potrebno ju je učiniti izvršnom i odlučiti kako ćete je pokrenuti. Tipičan korak je primjena:
chmod +x mi_script.sh
Odatle ga možete pokrenuti pomoću `./my_script.sh` ako ste u istom direktoriju, ili referenciranjem njegove apsolutne putanje: `/full/path /my_script.sh`. Druga opcija je pozvati ga putem `bash my_script.sh` bez davanja dozvola za izvršavanje, iako to nije uobičajena praksa u produkcijskim okruženjima.
Kada želite da se skripta periodično izvršava (dnevno, sedmično, svakih 5 minuta, itd.), cron dolazi do izražaja . Pomoću `crontab -e` možete urediti tabelu zadataka korisnika i definirati stvari poput:
0 0 * * * /ruta/backup.sh
*/5 * * * * /ruta/monitor.sh
Prva linija pokreće skriptu svakog dana u ponoć; druga svakih 5 minuta. Polja označavaju minutu, sat, dan u mjesecu, mjesec i dan u sedmici, tim redoslijedom. Možete vidjeti šta je već zakazano koristeći `crontab -l` .
Ako nešto krene po zlu, najbolje je provjeriti sistemske logove . Na Debianu/Ubuntuu, cron poruke se obično zapisuju u /var/log/syslog . Njihovim pregledom ćete saznati da li je zadatak pokrenut, da li se srušio zbog problema s dozvolama ili se uopće nije ni pokrenuo.
Debugging, najbolje prakse i specijalne varijable u Bashu
Debuggiranje Bash skripti ima svoje trikove jer, prema zadanim postavkama, ljuska nastavlja s izvršavanjem čak i ako naredba ne uspije. Da biste riješili problem, najbolje je omogućiti striktni način rada i koristiti opcije za debuggiranje koje Bash nudi.
Na početak skripte stavite nešto poput ovoga:
set -euo pipefail
set -x
Ovo uzrokuje da se skripta zaustavi na prvoj grešci ( -e ), tretira nedefinirane varijable kao greške ( -u ), detektuje greške u cjevovodima ( pipefail ) i prikazuje svaku proširenu naredbu prije njenog izvršavanja ( -x ). Tokom razvoja, ovo je neprocjenjivo; u produkciji biste možda radije aktivirali -x samo u određenim odjeljcima.
Pored BASH_REMATCH (vrlo korisne s regularnim izrazima), Bash ima interne varijable kao što su BASH_SUBSHELL (trenutni nivo podljuske), BASH_ENV (datoteka koja se učitava pri pokretanju podljuske), BASH_EXECUTION_STRING (komanda koja se izvršava) i BASH_VERSION (verzija interpretera). Sve one vam pomažu da prilagodite ponašanje skripte okruženju, otklonite neuobičajene probleme i osigurate kompatibilnost.
Kao dodatne dobre prakse, preporučuje se korištenje opisnih naziva varijabli , izbjegavanje rezerviranih riječi, dokumentiranje funkcija, uvijek validiranje korisničkog unosa i provjera izlaznih kodova kritičnih naredbi (sigurnosne kopije, brisanje, masovno premještanje).
I ne zaboravite eksterne alate poput ShellCheck-a , koji analizira vaše skripte i upozorava vas na suptilne greške, loše prakse i opasne konstrukcije. Integrisanje u vaš editor ili CI/CD pipeline je jednostavan način za poboljšanje kvaliteta.
Kolekcije Bash uslužnih programa i grafičkih korisničkih interfejsa za vaše skripte
Pored ugrađenih funkcija Basha, postoje moćni frameworkovi i kolekcije funkcija hostovane na GitHub-u koje možete "uključiti" u vlastite skripte koristeći `source` . Ovo vam omogućava da u sekundama ugradite uslužne programe čiji bi inače razvoj trajao dugo.
Jedan primjer je Bashmatic , okvir sa stotinama funkcija koje olakšavaju sve, od formatiranja izlaza i logova do istovremenog izvršavanja zadataka, upravljanja konfiguracijom i interakcije s vanjskim servisima. Snažno je fokusiran na pružanje jasnih povratnih informacija programeru dok se skripta izvršava, što je posebno cijenjeno kada vaši procesi traju nekoliko minuta ili sati.
Za paralelno izvršavanje zadataka, projekti poput bash-concurrent pružaju funkciju spremnu za korištenje koja pokreće više zadataka odjednom i prikazuje uređeni izlaz kako se završe. Ovo je idealno za skripte koje trebaju obraditi mnogo nezavisnih elemenata (više servera, datoteka itd.).
Ako vam trebaju lagani grafički interfejsi preko Basha, postoje projekti poput EasyBashGUI ili Script-Dialog koji generiraju GUI ili TUI dijaloge ovisno o tome što ste instalirali: kdialog, zenity, whiptail, dialog ... Na ovaj način, ista skripta može dobro funkcionirati bez obzira pokrećete li je iz grafičkog okruženja ili iz čistog terminala.
Opšta ideja sa ovim bibliotekama je uvijek ista: preuzmete ili klonirate repozitorij, a u svoj skript dodate liniju poput ` source /path/to/utilities.sh` . Od tada, sve funkcije definirane u toj datoteci postaju dostupne u vašem skriptu, kao da su vaše vlastite.
Konačno, savladavanje Bash skriptiranja i poznavanje nekoliko uslužnih programa trećih strana daje vam ogroman set alata za automatizaciju Linuxa (i sličnih okruženja) bez gubljenja vremena na ponovno izmišljanje tople vode. Od malih ličnih skripti do kritičnih procesa administracije sistema, kombinacija dobro poznatih komandi, jasnih kontrolnih struktura, dobrih praksi otklanjanja grešaka i eksternih biblioteka čini Bash ključnom komponentom svakog ozbiljnog tehničkog radnog procesa.

