Č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:
:q!
:wq
.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."
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č.