Bash skriptovanje predstavlja jedan od najpopularnijih i najpristupačnijih načina za programiranje vašeg Linux računara. Kroz ove jednostavne primere skripti, imaćete priliku da proniknete u sam proces i upoznate se sa ključnim elementima Bash programiranja.
1. Kako prikazati „Hello World“ u Bash-u
Primer „Hello World“ je izvanredan pristup učenju bilo kog programskog jezika, a ni Bash nije izuzetak.
U nastavku je prikazano kako da prikažete tekst „Hello World“ koristeći Bash:
- Započnite tako što ćete otvoriti tekstualni editor i kreirati novu datoteku u koju ćete uneti sledeće linije koda.
- Prvi red u vašoj Bash skripti mora uvek biti sledeći:
#!/bin/bash
Ova linija, poznata kao Shebang (#!/bin/bash), ključna je jer omogućava ljusci da prepozna način na koji treba izvršiti skriptu. U konkretnom slučaju, koristi se Bash interpreter.
- Svaki red koji započinje simbolom # smatra se komentarom. Iako je Shebang linija poseban slučaj, možete dodavati svoje komentare kako biste pojasnili svoj kod. Na primer, možete dodati komentar u drugom redu:
- Tekst na standardni izlaz možete ispisati koristeći komandu `echo`, praćenu željenom vrednošću. U trećem redu, dodajte sledeće:
echo "Hello World"
- Sada je potrebno da sačuvate skriptu, najbolje sa ekstenzijom .sh, recimo hello_world.sh. Iako ekstenzija nije obavezna, preporučuje se da se držite ove konvencije.
- Da bi se skripta mogla pokrenuti, potrebno je da je učinite izvršnom. To se postiže korišćenjem komande `chmod` („promeni režim“) sa argumentom +x („izvršni“) i imenom vaše skript datoteke:
chmod +x hello_world.sh
- Za pokretanje skripte iz njenog direktorijuma, koristite sledeću komandu:
./hello_world.sh
- Kada pokrenete skriptu, tekst „Hello World“ će se pojaviti na vašem terminalu:
2. Stvaranje direktorijuma na osnovu unetih podataka
Iz vaših skripti, imate mogućnost pokretanja bilo kog programa koji biste inače koristili na komandnoj liniji. Na primer, možete kreirati novi direktorijum pomoću komande `mkdir`.
- Započnite sa istom shebang linijom kao i ranije:
#!/bin/bash
- Od korisnika zatražite da unese ime direktorijuma koristeći komandu `echo`:
echo "Unesite ime novog direktorijuma:"
- Upotrebite ugrađenu komandu `read` za preuzimanje korisničkog unosa. Jedan argument definiše ime promenljive u koju će ljuska smestiti unos:
read newdir
- Kada koristite vrednost sačuvanu u promenljivoj, stavite simbol dolara ($) ispred njenog imena. Sadržaj promenljive unosa možete proslediti kao argument komandi `mkdir` da bi se kreirao novi direktorijum:
mkdir $newdir
- Nakon pokretanja ove skripte, biće zatražen unos od vas. Ukoliko unesete validno ime direktorijuma, skripta će ga kreirati u vašem trenutnom direktorijumu:
3. Stvaranje direktorijuma koristeći argumente komandne linije
Većina Linux komandi, kao alternativu interaktivnom unosu, podržava argumente. Argument možete proslediti prilikom pokretanja programa, kako biste uticali na njegovo ponašanje.
Unutar vaše skripte, možete koristiti `$1` za pristup specijalnoj promenljivoj koja sadrži vrednost prvog argumenta. Slično tome, `$2` će se odnositi na drugi argument, i tako dalje.
- Kreirajte direktorijum koristeći komandu `mkdir` iz prethodnog primera. Međutim, ovog puta koristite ugrađenu promenljivu `$1`:
#!/bin/bash
mkdir $1 - Sada pokrenite skriptu, ali ovog puta uz prosleđivanje željenog imena novog direktorijuma kao argument:
./arg_dir.sh Test
- Kao i obično, počnite sa shebang linijom:
#!/bin/bash
- Pre poziva na komandu `mkdir`, proverite da li je prvi argument prazan (odnosno, da li nema argumenata). Ovo možete postići korišćenjem Bash `if` izraza, koji izvršava kod na osnovu datog uslova:
if ["$1" = ""]; then
- Ukoliko je prvi argument prazan, ispišite poruku o grešci i prekinite izvršavanje skripte:
echo "Molimo vas da navedete ime novog direktorijuma kao prvi argument"
exit - Pomalo neobična ključna reč „fi“ (što je „if“ unazad) označava kraj `if` naredbe u Bash-u:
fi
- Vaša skripta sada može nastaviti kao i pre, da obradi slučaj kada je argument prisutan:
mkdir $1
Možda vas zanima šta se dešava ako pokrenete skriptu bez navođenja argumenta. Isprobajte to; trebalo bi da dobijete poruku o grešci koja počinje sa „usage: mkdir“:
Ako ne prosledite argumente komandne linije, vrednost `$1` će biti prazna. Kada vaša skripta pozove `mkdir`, neće proslediti argument, što će rezultirati greškom. Da biste ovo izbegli, možete sami proveriti stanje i prikazati korisniju poruku o grešci:
Kada pokrenete ovu novu verziju skripte, biće prikazana poruka ukoliko zaboravite da unesete argument:
4. Brisanje datoteke pomoću Bash funkcije
Ukoliko se desi da ponavljate isti kod, razmislite o tome da ga enkapsulirate u funkciju. Nakon toga, možete pozivati tu funkciju kada god zatreba.
Evo primera funkcije koja briše specificiranu datoteku.
- Započnite sa shebang linijom:
#!/bin/bash
- Definišite funkciju tako što ćete uneti njeno ime, praćeno praznim zagradama i naredbama unutar vitičastih zagrada:
del_file() {
echo "brišem $1"
rm $1
}Funkciju možete pozvati prosleđujući joj ime datoteke za brisanje:
del_file test.txt
Prilikom pozivanja funkcije, ona postavlja specijalnu `$?` vrednost sa statusom izlaza poslednje izvršene komande. Status izlaza je koristan za proveru grešaka; u ovom primeru možete testirati da li je komanda `rm` uspešno izvršena:
if [ $? -ne 0 ]; then
echo "Žao mi je, nisam mogao da obrišem datoteku"
fi
5. Izrada osnovnog kalkulatora za aritmetičke operacije
Ovaj poslednji primer demonstrira vrlo osnovni kalkulator. Kada ga pokrenete, potrebno je da unesete dve vrednosti, a zatim da odaberete aritmetičku operaciju koja će se izvršiti nad njima.
Evo koda za `calc.sh`:
#!/bin/bash
echo "Unesite prvi broj: "
read aecho "Unesite drugi broj: "
read b
echo "Izaberite aritmetičku operaciju :"
echo "1. Sabiranje"
echo "2. Oduzimanje"
echo "3. Množenje"
echo "4. Deljenje"
read choice
case $choice in
1)
result=`echo $a + $b | bc`
;;2)
result=`echo $a - $b | bc`
;;3)
result=`echo $a \* $b | bc`
;;4)
result=`echo "scale=2; $a / $b" | bc`
;;
esacecho "Rezultat: $result"
Obratite pažnju na korišćenje `case … esac`, što je Bash ekvivalent `switch` naredbi iz drugih jezika. Omogućava vam da testirate vrednost — u ovom slučaju, promenljivu `choice` — na nekoliko fiksnih vrednosti i pokrenete odgovarajući kod.
Ova skripta koristi komandu `bc` za izvršavanje svakog proračuna.