Naprej Nazaj Vsebina

8. Kanček programiranja

8.1 Skripte: datoteke .BAT na steroidih

Če ste, tako kot pisec, uporabljali datoteke .BAT za to, da ste dolge ukazne vrstice nadomestili z bližnjicami, ste medtem verjetno že ugotovili, da gre na Linuxu to z vzdevki v datoteki .profile. Če pa so bile vaše datoteke .BAT bolj zapletene, boste gotovo navdušeni nad skriptnim jezikom, ki ga ponuja ukazna lupina. Vsaj tako močan je kot QBasic, če ne bolj. Pozna spremenljivke, strukture kot while, for, case, if..then..else, in veliko drugih dobrot; lahko ga imamo za dobro alternativo ,,pravim`` programskim jezikom.

Skripta -- ekvivalent datoteki .BAT v DOS -- je enostavna tekstovna datoteka z ukazi, ki jo lahko napišemo s katerimkoli urejevalnikom, shranimo, in napravimo izvedljivo z ukazom chmod +x <moja_skripta>. Poženemo ga enostavno tako, da vtipkamo njegovo ime.

Majhno opozorilo. S sistemskim urejevalnikom vi ima večina novih uporabnikov precejšnje težave. Tukaj ne bomo razlagali, kako se ga uporablja, ker ga pisec tega spisa ne mara. Zadovoljiti se boste morali z najnujnejšim:

Dober urejevalnik za začetnike je joe. Če ga pokličemo z imenom jstar, se obnaša enako kot urejevalnik v DOS. jed v načinu WordStar ali IDE je še boljši. O tem, kje najdete enega in drugega, se poučite v razdelku Kje najdemo programe.

Pisanje skript v bash je tako obsežna tema, da bi sama zahtevala celo knjigo. Tu se ne bomo več spuščali v globine te teme, ampak bomo navrgli samo še en primer skripte, iz katerega se lahko naučite nekaj osnovnih pravil:


#!/bin/sh
# zgled.sh
# To je komentar
# Ne spreminjajte prve vrstice!
echo "Sistem: `uname -a`"       # uporabimo izpis zunanjega ukaza uname
echo "Tej skripti je ime $0"    # vgrajene spremenljivke
echo "Podali ste $# parametrov; ti so: "$*
echo "Prvi parameter je: "$1
echo -n "Vaše ime? " ; read ime
echo Opazite razliko: "hi $ime" # dvojni narekovaji
echo Opazite razliko: 'hi $ime' # enojni narekovaji
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then      # imenik?
    DIRS=`expr $DIRS + 1`       # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: slika" ;;
    *.txt|*.tex) echo "${file}: besedilo" ;;
    *.c|*.f|*.for) echo "${file}: izvorna koda programa" ;;
    *) echo "${file}: druga datoteka" ;;
  esac
done
echo "Imenikov je ${DIRS}, datotek pa ${FILES}"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then           # izhodna koda zadnjega ukaza
  echo "ZxY--!!!WKW not found"
fi
echo "dovolj... 'man bash' vam bo postregel z dodatnimi informacijami."

8.2 C za vas

Na Unixih je sistemski jezik C, najsi vam je všeč ali ne. Na voljo pa je tudi kopica drugih jezikov: Java, Fortran, Pascal, Lisp, Perl, Awk...

Ker verjamemo, da C že znate, bomo tu le navedli nekaj napotkov za tiste, ki vas je razvadil Turbo C++ ali kaj sorodnega. Prevajalnik za C na Linuxu se imenuje gcc in ne vključuje lepot, kot jih njegovi dvojniki v DOS: ne vsebuje integriranega okolja za delo, interaktivne pomoči, integriranega razhroščevalnika in podobnega. Je res samo surovi prevajalnik, ki ga poženemo iz ukazne vrstice (kot prevajalnik pa je resda zelo močan in učinkovit). Običajni programček hello.c prevedemo z ukazom:

$ gcc hello.c

To bo proizvedlo izvodljiv program z imenom a.out. Če želimo izvodljiv program poimenovati kako drugače, lahko to navedemo v ukazni vrstici, npr.:

$ gcc -o hola hello.c

Če bi radi v izvodljiv program povezali še knjižnico, dodamo izbiro -l<ime_knjižnice>. Takole na primer povežemo program s standardno matematično knjižnico:

$ gcc -o matemprog matemprog.c -lm

(Izbira -l<nekaj> pove prevajalniku gcc, naj v izvodljiv program poveže še knjižnico /usr/lib/lib<nekaj>.a; tako -lm iz prejšnjega zgleda poveže knjižnico /usr/lib/libm.a).

To je takorekoč vse, kar boste potrebovali za prevajanje kratkih programčkov. Kadar pa pišete dolg program, katerega izvorna koda je razbita v več manjših datotek, si boste precej olajšali delo s programom make. Recimo, da pišete razčlenjevalnik izrazov. Izvorna koda se imenuje parser.c in kliče deklaracije iz glav parser.h in xy.h. Funkcije, definirane v parser.c pa želite uporabiti v drugem programu, recimo calc.c, ki prav tako prebere glavo parser.h. Kakšna zmešnjava! Kaj morate torej napraviti, da prevedete calc.c?

Kar morate napraviti, je napisati takoimenovani makefile, ki vodi evidenco o odvisnostih med izvornimi ter prevedenimi datotekami. V našem primeru bi bila takšna:


# makefile za prevajanje calc.c
# Vnesite <TAB> kjer je označeno

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# Program calc je odvisen od dveh prevedenih datotek: calc.o in parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o je odvisen od izvorne datoteke calc.c in glave parser.h

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o je odvisen od izvorne datoteke parser.c in dveh glav

# To je vse.

Shranite to datoteko pod imenom Makefile. Zdaj preprosto napišete make, ki bo prevedel cel paket. Alternativno jo lahko shranite tudi pod drugačnim imenom, denimo calc.mak, le da boste to ime zdaj morali navesti kot parameter: make -f calc.mak. Več o tem se boste naučili ob branju priročnika. Tudi funkcije iz standardne knjižnice imajo svoje strani v priročniku, in sicer v tretjem poglavju. Zgled kaže, kako do navodil za funkcijo printf:

$ man 3 printf

Napake v programih lahko odpravljate z razhroščevalnikom gdb. Ukaz info gdb vas bo poučil o podrobnostih.

Programerju je na voljo zelo veliko število različnih knjižnic. Med prvimi, ki se jih boste morda ogledali, sta ncurses, ki podpira delo z znakovnim zaslonom, ter svgalib za delo v grafičnem načinu. Če ste dovolj pogumni, da se boste lotili programiranja za X11, obstajo že omenjene knjižnice XForms, Qt, Gtk in mnoge druge, ki pisanje programov za X11 znatno olajšajo. Oglejte si na primer še http://www.xnet.com/~blatura/linapp6.html.

Mnogi urejevalniki se tudi lahko obnašajo kot integrirano okolje. emacs in jed, na primer, podpirata barvanje sintakse, zamikanje programske kode in podobno. Alternativa pa je paket rhide, ki ga lahko snamete z ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/. Je kopija Borlandovega integriranega okolja, in precej verjetno je, da vam bo všeč.


Naprej Nazaj Vsebina