Sljedeći dio Prethodni dio Sadržaj

11. Malo programiranja

11.1 Skripte u ljusci: .BAT datoteke na steroidima

Ako ste koristili .BAT datoteke kao prečice do dugih naredbi (ja jesam, puno), to možete odgovarajućim alias redovima (pogledajte gornji primjer) u profile ili .bash_profile. Ali ako su vam .BAT-ovi bili složeniji, onda ćete obožavati jezik ljuske: moćan je kao dobri stari QBasic, ako ne i više. Ima varijable, konstrukte 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 se zove vi i po mom iskustvu vrlo je težak za većinu novih korisnika. Neću vam objašnjavati kako ga upotrebljavati; pogledajte knjigu Matta Welsha ili potražite upute na mreži. Ovdje ću reći samo ovo:

Dobar editor za početnika je joe: ako ga pokrenete kao jstar, dobit ćete iste tipke kao u DOSWin editoru. jed u WordStar ili IDE modu je još 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 vase_ime
echo pogledajte razliku: "zdravo, $vase_ime" # citiranje s "
echo pogledajte razliku: 'zdravo, $vase_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"

11.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 se zove 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 hello 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>.so, pa -lm veže /usr/lib/libm.so.

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 headera, 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; među prvima koje ćete željeti koristiti su ncurses (efekti u tekstualnom modu) i svgalib (grafika na konzoli). Ako ste dovoljno hrabri za programiranje u X11 (nije to tako teško), postoje nekoliko librarya koje pisanje X11 programa čine vrlo lakim. Pogledajte http://www.xnet.com/~blatura/linapp6.html, imajući pritom na umu da Gtk postaje Linux standard.

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.


Sljedeći dio Prethodni dio Sadržaj