četvrtak, 25 aprila, 2024
Sam svoj majstor

Pisanje skripti u Bešu (1. deo) – Uvod

Autor: Nikola Todorović

Ovim člankom započinjemo serijal o veštini za koju smo sigurni da može biti od velike koristi za naprednije korisnike linuks operativnih sistema. Pisanje skripti u Bešu (eng. Bash) je moćna i korisna veština koja nam omogućava da automatizujemo veliki broj radnji. Iako je ova veština neizostavna za nekog ko želi da bude sistem administrator, ovaj serijal će biti orijentisan ka početnim korisnicima koji se do sada nisu susretali sa pisanjem skripti, ali je neophodno da su upoznati sa osnovama programiranja i osnovnim komandama u Bešu, o kojima možete pročitati u drugom serijalu koji je obavljen u ovom časopisu.

Za početak, unutar direktorijuma po izboru, komandom mkdir ćemo napraviti novi radni direktorijum u kojem ćemo do kraja serijala obavljati sve radnje. Unutar novonapravljenog direktorijuma napravićemo nekoliko fajlova sa različitim ekstenzijama i unutar tih fajlova sa editorom po izboru uneti neki tekst, nije neophodno da tekst bude povezan sa ekstenzijom fajla.

Mkdir radni_dir touch vebsajt.html touch program.c touch beleske.txt touch lista_poslova.txt

U nastavku ćemo komandom ls izlistati fajlove, ali ono što vam je možda novo jeste dodatak *.txt koji komandi ls govori da izlista sve fajlove koji se završavaju sa “.txt”. Sledeća komanda, stat, će nam dati osnovne podatke o fajlu kao što su veličina fajla, prava pristupa, kada je poslednji put izmenjen i slično.

ls *.txt stat program.c wc -l vebsajt.html

Komanda wc (skr. Word count) uz dodat parametar -l će ispisati broj linija unutar fajla. Ova komanda ima mogućnost da ispiše broj linija, karaktera, bajtova ili reči, kako bismo znali koje su oznake za flegove koji se prosleđuju ovoj komandi. Bitno je da se dobro snalazite u dokumentaciji koja dolazi uz Beš komande, odnosno da znate da koristite ime_komande –help za osnovnu dokumentaciju i man ime_komande za opširniju dokumentaciju.

Dobili smo zadatak da prosledimo kolegi u jednom fajlu poslove koje ćemo danas obaviti i želimo da mu pošaljemo prvih pet poslova sa liste poslova. Umesto da otvorimo fajl, iskopiramo prvih pet redova, pa onda kreiramo novi fajl u koji ćemo ubaciti prvih pet poslova, sav ovaj posao može se obaviti u jednoj liniji. Komandom head (glava) ćemo uzeti prvih nekoliko linija, a dodatkom -n5 ćemo naznačiti komandi da uzme prvih pet iz fajla lista_poslova.txt i onda uz pomoć operatora >, ono što nam vraća komanda head ćemo proslediti u fajl danasnji_poslovi.txt, i tom prilikom nije potrebno da kreiramo taj fajl već se to automatski odradi ukoliko je fajl prosleđen operatoru > ne postoji u radnom direktorijumu. Nakon toga ćemo komandom cat samo prikazati sadržaj nove liste.

Head -n5 lista_poslova.txt > danasnji_poslovi.txt cat danasnji_poslovi.txt Tail -n1 lista_poslova.txt >> danasnji_poslovi.txt cat danasnji_poslovi.txt

Nasuprot komandi head, imamo komandu tail (Rep), kojom možemo uzeti poslednjih nekoliko linija iz fajla, samo ovaj put umesto da prebacimo u novi fajl, znakovima », mi ćemo nadovezati poslednju liniju na već postojeći fajl. U slučaju da smo sad koristili znak >, prethodni sadržaj fajla bi bio obrisan i u njega smešten novi.

Ukoliko bi postojala potreba da se svakog dana pošalju obavljeni poslovi, bilo bi dobro da se ceo proces učini malo efikasnijim, pa da se umesto unošenjem 4 komande sve obavi unošenjem jedne. Iako bi veštijim čitaocima odmah bilo uočljivo da se prethodnih nekoliko komandi može obaviti jednom malo kompleksnijom komandom, to ćemo ostaviti za neki od narednih delova serijala, a u nastavku ovog ćemo prethodno napisane komande pretvoriti u skriptu. Ono što nam Beš omogućava jeste da niz komandi stavimo u fajl i da on potom izvrši te komande, a da bi taj fajl postao skripta potrebno je da u prvoj liniji ima putanju i naziv interpretera za skriptu, #!/bin/bash.

#!/bin/bash Head -n5 lista_poslova.txt > danasnji_poslovi.txt Tail -n1 lista_poslova.txt >> danasnji_poslovi.txt cat danasnji_poslovi.txt

Iznad se nalazi ceo izgled naše prve male skripte. Komandu cat koju smo dva puta izvršavali prvi put, sada smo stavili da se izvršava samo jednom jer sa sigurnošću znamo šta će uraditi komande pa nema potrebe za prikazivanjem međurezultata. Nakon što otkucamo skriptu , potrebno ju je sačuvati i dodeliti odgovarajući naziv. Iako je u ovom slučaju prva stvar koja nam pada na pamet kod imenovanja skripte naziv prva_skripta.sh, predlog je da budemo malo praktičniji i damo skripti naziv koji će nas asocirati na to šta zapravo skripta radi, tako da bi u ovom slučaju bilo dobro da skriptu nazovemo obavljeni_poslovi.sh.

Kada se završi deo sastavljanja skripte, u direktorijumu u kom se nalazi skripta potrebno je dodeliti joj mogućnost izvršavanja, a to se postiže komandom:

chmod +x obavljeni_poslovi.sh

A sam poziv skripte se obavlja na sledeći način:

./obavljeni_poslovi.sh

U ovom uvodnom delu prošli smo kroz nekoliko komandi, koje su možda bile nove za neke čitaoce, i na kraju sastavili prvu skriptu. Ohrabrujemo čitaoce da po istom principu kao što smo sastavili ovu skriptu, naprave svoju skirptu kao niz nekoliko komandi koje već znaju i čije zajedničko izvršavanje im može biti od neke koristi. U narednom delu ćete imati priliku da naučite mnogo više novih stvari.