Slijedeći dio Prethodni dio Sadržaj

9. Malo programiranja

9.1 Skripte u ljusci: .BAT datoteke na steroidima

Ako ste koristili .BAT datoteke za prečice do dugih naredbi (ja jesam, puno), to možete odgovarajućim alias redovima (pogledajte gornji primjer) u profile ili .profile. Ali ako su vam .BAT-ovi bili složeniji, onda ćete obožavati jezik ljuske: moćan je kao QBasic, ako ne i više. Ima varijable, strukture kao while, for, case, if... then... else i puno drugih mogućnosti: dobra je alternativa "pravom" programskom jeziku.

Za pisanje skripte -- ekvivalenta .BAT datoteci pod DOS-om -- samo trebate napisati standardnu ASCII datoteku koja sadrži instrukcije, snimiti ju, a onda učiniti izvršnom naredbom chmod +x <skripta>. Ako ju hoćete izvršiti, samo napišite njeno ime.

Malo upozorenje. Editor sustava zove se vi i po mom iskustvu vrlo je težak za većinu novih korisnika. Neću vam objašnjavati kako ga upotrebljavati, jer ga ne volim i ne koristim. Reći ću samo ovo:

Dobar editor za poćetnika je joe: ako ga pokrenete kao jstar, dobit ćete iste tipke kao u DOS-ovom editoru. jed u WordStar ili IDE modu još je bolji. Pogledajte dio Gdje naći aplikacije za informacije gdje ih nabaviti.

Pisanje skripti u bashu tako je golema tema da zahtijeva knjigu samo za sebe i neću dublje u nju ulaziti. Samo vam dajem primjer skripte iz koje možete vidjeti neka osnovna pravila:


 
#!/bin/sh
# primjer.sh
# ja sam komentar 
# ne mijenjajte prvi red, on mora biti tamo
echo "Ovaj sustav je: `uname -a`" # korištenje izlaza naredbe
echo "Moje ime je $0" # ugrađene varijable
echo "Dali ste mi ovih $# parametara: "$*
echo "Prvi parametar je: "$1
echo -n "Kako se zovete? " ; read vaše_ime
echo pogledajte razliku: "zdravo, $vaše_ime" # citiranje s "
echo pogledajte razliku: 'zdravo, $vaše_ime' # citiranje s '
DIROVI=0 ; DATOTEKE=0
for datoteka in `ls .` ; do
  if [ -d ${datoteka} ] ; then # ako je datoteka direktorij
    DIROVI=`expr $DIROVI + 1`  # DIROVI = DIROVI + 1
  elif [ -f ${datoteka} ] ; then
    DATOTEKE=`expr $DATOTEKE + 1`
  fi
  case ${datoteka} in
    *.gif|*jpg) echo "${datoteka}: grafička datoteka" ;;
    *.txt|*.tex) echo "${datoteka}: tekstualna datoteka" ;;
    *.c|*.f|*.for) echo "${datoteka}: datoteka s izvornim kodom" ;;
    *) echo "${datoteka}: općenita datoteka" ;;
  esac
done
echo "ima ${DIROVI} direktorija i ${DATOTEKE} datoteka"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # izlazni kod zadnje naredbe
  echo "ZxY--!!!WKW nije nađen"
fi
echo "dosta... napišite 'man bash' ako hoćete još informacija"

9.2 C za vas

Pod Unixom jezik sustava je C, svidjelo se to vama ili ne. Tu je i hrpa drugih jezika (Java, FORTRAN, Pascal, LISP, BASIC, Perl, AWK...).

Ako znate C, evo nekoliko uputa za one razmažene Turbo C++-om ili nekim njegovim DOS rođakom. Linuxov C kompajler zove se gcc i nedostaju mu svi ukrasi uobičajenih IDE pandana: nema IDE-a, izravnih uputa, integriranog debuggera, itd. To je samo grubi kompajler komandne linije, vrlo moćan i djelotvoran. Za kompajliranje standardnog hello.c napišite:

 
$ gcc hello.c
što će dati izvršnu datoteku a.out. Ako hoćete drugo ime, napišite
 
$ gcc -o zdravo hello.c

Za vezanje librarya na program, dodajte prekidač -l<imelibrarya>. Na primjer, za vezanje s matematičkim libraryem:

 
$ gcc -o matematika matematika.c -lm

-l<imelibrarya> kaže gccu da veže library /usr/lib/<imelibrarya>, pa -lm veže /usr/lib/libm.a.

Zasad je sve u redu. Ali kad se vaš program sastoji od više datoteka, koristit ćete alat make. Prepostavimo da ste napisali parser izraza: njegova se datoteka zove parser.c i uključuje dva zaglavlja, parser.h i xy.h. A onda želite koristiti funkcije iz parser.c u drugom programu, recimo kalk.c, koji također uključuje parser.h. Kakva zbrka! Kako ćete kompajlirati kalk.c?

Napisat ćete takozvani makefile, koji kompajleru pokazuje međuovisnosti izvornih i objektnih kodova. U našem primjeru:


 
# Ovo je makefile za kompajliranje kalk.c
# Pritisnite <TAB> gdje je označeno!

kalk: kalk.o parser.o
<TAB>gcc -o kalk kalk.o parser.o -lm
# kalk ovisi o dvije objektne datoteke: kalk.o i parser.o

kalk.o: kalk.c parser.h
<TAB>gcc -c kalk.c
# kalk.o ovisi o dvije izvorne datoteke

parser.o: parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o ovisi o tri izvorne datoteke

# kraj makefilea

Ovu datoteku snimite kao Makefile i napišite make za kompajliranje programa; možete ju snimiti i kao kalk.mak i napisati make -f kalk.mak. Naravno, RMP. Nešto uputa o C funkcijama pokrivaju man stranice 3. dijela; na primjer,

 
$ man 3 printf

Za otklanjanje grešaka koristite gdb. info gdb za njegovo korištenje.

Librarya ima puno; najvažnije su ncurses, za efekte u tekstualnom modu i svgalib za grafiku. Ako ste dovoljno hrabri za programiranje u X11, postoje libraryi kao što je već spomenuti XForms, Qt, Gtk i mnoge drugi, kojima pisanje X11 programa postaje lako. Pogledajte http://www.xnet.com/~blatura/linapp6.html.

Mnogi editori mogu imitirati IDE; na primjer, emacs i jed imaju sintaktičko osvjetljavanje, automatsko uvlačenje itd. Možete nabaviti i paket rhide s ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/. To je klon Borlandovog IDE-a i vjerojatno će vam se svidjeti.


Slijedeći dio Prethodni dio Sadržaj