LAKI PINGVINI<>
122011<><>

Bash za početnike (4)

chmod, sha-bang, ~/bin

Naučite kako da složene grupe naredbi koristite više puta

Četvrti i poslednji deo naše male škole Bash programiranja verovatno ste iščekivali s nestrpljenjem, misleći da ćete posle toga postati pravi hakeri. Nećemo potpuno da vas razočaramo – to najviše zavisi od vas samih. Ako ste istraživali mogućnosti svega onoga što smo pominjali u prethodne tri lekcije, vreme je da saznate kako sve te složene grupe naredbi da sjedinite i sačuvate za kasniju upotrebu. Dakle, u finalu Bash kvadrologije pokazaćemo vam kako da napravite sopstvene skripte.

Rađanje nove skripte

Da bismo napravili novu Bash skriptu dovoljno je u terminalu izvršiti naredbu:

touch skripta.sh

Na ovaj način pravimo novu praznu datoteku u koju možemo da upišemo bilo šta. Naravno, budite kreativniji, pa umesto generičkog „skripta.sh” izaberite neki smisleniji naziv. Kada se uhodate i postanete iskusniji hakeri, shvatićete da nije obavezno da skripta ima nastavak .sh tako da će savršeno odgovarati i samo naziv skripta. Ekstenziju obično koristimo da bismo sebi i drugim korisnicima naglasili o kakvoj je skripti reč (Bash, Perl, PHP, Python i drugo).

Prva stvar koja skriptu čini drugačijom od običnog teksta jeste to što ona mora da ima „exec flag”, tj. datoteka mora da bude izvršna. Da bismo to regulisali, pokrećemo naredbu

chmod u+x /putanja/do/skripta.sh

Pomenutom naredbom skriptu činimo izvršnom samo za korisnika koji je njen vlasnik, a ako želimo da ona bude izvršna za sve korisnike na sistemu, izostavljamo ono u ispred plusa:

chmod +x /putanja/do/skripta.sh

Iako su skripte zapravo obične tekstualne datoteke koje sadrže gomilu naredbi (vama ranije poznatih kao „kobasice za ono crno”), od običnih tekstova ih, osim toga što se radi o izvršnim datotekama, razlikuje i njihovo zaglavlje – prvi red koji i nama i sistemu kaže u kom je jeziku skripta napisana. Prvi red počinje jednom „tarabom” i jednim uzvičnikom (u žargonu poznatijim kao „sha-bang”), iza čega sledi putanja do interpretera, koji naredbe u ostatku datoteke prevodi u konkretne akcije. Za Bash skripte karakteristično je zaglavlje #!/bin/bash (kompatibilnosti radi često se koristi i samo #!/bin/sh, ali to ne treba da vas brine, vi se držite prethodno pomenute kombinacije).

Fabula radnje

Kad smo napravili prve korake i kreirali „skelet” skripte, u nju možemo da upišemo različite kombinacije naredbi pomenutih u prethodnim lekcijama, pa čak i da ih dodatno kombinujemo sa drugim naredbama, koje zbog ograničenog prostora nismo pomenuli, a GNU/Linux sistem ih je prepun.

U primeru koji sledi pripremili smo interaktivnu skriptu za generisanje nasumičnih šifara, koja nakon pokretanja od korisnika traži da unese koliko šifara želi da dobije, koje dužine šifre treba da budu i da li one treba da sadrže specijalne znake (znaci interpunkcije i slično). Nakon unosa ta tri parametra, skripta obaveštava korisnika o tome kakve će šifre biti napravljene i ispisuje traženi broj šifara jednu ispod druge.

#!/bin/bash

printf "Koliko razlicitih sifara zelite? [5] "

read BROJ

if [ "$BROJ" == "" ]; then BROJ=5; fi

printf "Koliko ce sifre biti dugacke? [13] "

read DUZINA

if [ "$DUZINA” == "" ]; then DUZINA=13; fi

printf "Da li treba da sadrze specijalne znake? [y/n] "

read ZNACI

printf "Pravim $BROJ sifara od $DUZINA karaktera "

if [ "$ZNACI” == "y" ]; then

printf "sa specijalnim znacima:\n"

ZNACI="[:graph:]"

else

printf "bez specijalnih znakova:\n"

ZNACI="[:alnum:]"

fi

i=0

while [ $i -lt $BROJ ]; do

cat /dev/urandom | tr -cd "$ZNACI" | head -c ${1:-$DUZINA}

echo

(( i++ ))

done

Smestite gornji kôd u ranije pripremljeni skelet vaše skripte, snimite izmene i pokrenite je u terminalu svaki put kada vam zatreba nasumično generisana šifra za mejl, forum, nalog na društvenoj mreži ili za druge potrebe. Slobodno eksperimentišite, pokušajte da „naučite” skriptu pravopisu pomoću naredbe case (koju smo opisali u SK 11/2011), dodajući promenu reči „šifara” i „karaktera” po broju. Otkrićemo vam samo da poslednju cifru iz promenljive $BROJ (ekvivalentno i za promenljivu $DUZINA) dobijate sintaksom:

${BROJ:${#BROJ}-1:1}

Dostupnost korisnicima

Ako tek uplovljavate u vode terminala, savetujemo vam da svoje skripte ne gomilate u korisničkom direktorijumu, već da pripremite poddirektorijum ~/bin i u njega čuvate svoje skriptotvorine. Ako tako uradite, ubuduće će biti dovoljno da ukucate naziv skripte bez putanje do nje, i ona će biti izvršena. Ako kojim slučajem vaša distribucija u promenljivoj $PATH ne sadrži putanju do korisničkog direktorijuma ~/bin, što možete da proverite naredbom

echo $PATH | grep $USERNAME/bin

onda u datoteku ~/.profile dodajte sledeće:

if [ -d "$HOME/bin" ]; then

PATH="$HOME/bin:$PATH"

fi

Ako pak želite da vašu skriptu mogu da koriste svi korisnici na mašini a ne samo vi, onda je umesto u ~/bin smestite u sistemski direktorijum /usr/bin i učinite je izvršnom za sve korisnike na sistemu kao što smo ranije pomenuli.

Problem?

Ako iz prve napišete skriptu koja će raditi bez greške, onda je trebalo da preskočite naš „Bash za početnike”. Međutim, ako spadate među one koji pri prvom pokretanju skripte dobiju upozorenje o grešci, ne očajavajte – zahvaljujući tim greškama svoje skripte ćete učiniti funkcionalnim. Najčešće se prave sintaksne greške jer u toku kucanja preskočimo neki taster, a nije redak slučaj da nikako ne dobijamo ispis neke promenljive sve dok ne shvatimo da smo umesto npr. echo $BROJ upisali echo $BRJO. Čitajte poruke o greškama, a ako ne znate kako da ih rešite, pitajte Google.

Dobro, ali čemu sve to?

Ako se posle svega ovoga zapitate čemu zapravo skripte služe, nećemo vas lagati. Skripte vam uopšte nisu potrebne ako imate previše slobodnog prostora u mozgu, slonovsko pamćenje, brze prste i vremena na pretek. Ako vam nedostaje samo jedno od pobrojanog, onda će skripte biti vaš lični Google. Ukratko, skripte nas oslobađaju kucanja komplikovanih i/ili dugačkih nizova naredbi, ne moramo da pamtimo sintaksu za naredbe koje povremeno koristimo, skraćuju vreme potrebno za obavljanje većeg broja manje ili više komplikovanih operacija, a ostavljaju i mogućnost da istu rutinu ponovimo neograničen broj puta kad god nam to zatreba.

• • •

Setite se da se čovek uči dok je živ. Neka vam Bash za početnike bude podsetnik i polazna tačka za istraživanje, a kad napišete nešto korisno i zanimljivo ili naiđete na problem koji ne možete da rešite ni sami ni pomoću Googlea, posetite naš forum bit.ly/sklp-forum i slomićemo glavolomku zajedno. Srećno hakovanje!

Aleksandar UROŠEVIĆ

 
Bash za početnike (4)
Šta mislite o ovom tekstu?
Alati za nadgledanje sistema
Sistem koji oslobađa
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera