Verder Terug Inhoud

10. Een Beetje Programmeren

10.1 Shell Scripts: .BAT Bestanden

Als je gebruik maakte van .BAT bestanden om shortcuts aan te maken van lange commandoregels (Ik deed dit veel), kun je dit doel bereiken door hiervoor geschikte alias regels toe te voegen aan het bestand profile of .bash_profile (zie het voorbeeld hierboven). Maar als je .BAT bestanden gecompliceerder waren, dan zul je de script taal van de shell zeker weten te waarderen: het is net zo krachtig als die `goeie ouwe' QBasic, zo niet beter. Het beschikt over variabelen, structuren zoals while, for, case, if... then... else, en nog vele andere mogelijkheden: het kan een goed alternatief zijn voor een ``echte'' programmeertaal.

Het enige wat je hoeft te doen om een script te kunnen schrijven---het equivalent van een .BAT bestand onder DOS---, is om een standaard ASCII bestand te schrijven waar de instructies in staan, het op te slaan en het uitvoerbaar te maken met het commando chmod +x <scriptfile>. Tik de naam van het bestand in, om het op te starten.

Een waarschuwing. De systeem editor wordt vi genoemd, en mijn ervaring is dat nieuwe gebruikers het erg moeilijk in 't gebruik vinden. Ik ga niet uitleggen hoe je het kunt gebruiken; raadpleeg alsjeblieft Matt Welsh's boek of zoek naar een tutorial op het net. Ik volsta met hier te zeggen dat:

Een goede editor voor beginners is joe: start het programma door jstar in te tikken. je krijgt dezelfde key bindings als in de DOSWin editor. jed in WordStar of IDE mode is zelfs beter. Raadpleeg paragraaf Waar kun je applicaties vandaan halen om erachter te komen hoe je aan deze editors kunt komen.

Het schrijven van scripts onder bash is zo'n veelomvattend onderwerp dat hiervoor een volledig boek nodig zou zijn, en ik zal het onderwerp hier niet verder uitdiepen. Ik geef je slechts een voorbeeld van een shellscript, van waaruit je enkele basisregels kunt halen:


#!/bin/sh
# sample.sh
# Ik ben commentaar
# wijzig de eerste regel niet, die moet er staan
echo "Dit systeem is : `uname -a`" # gebruik de uitvoer van het commando
echo "Mijn naam is $0" # ingebouwde variabelen
echo "Je gaf me de volgende $# parameters: "$*
echo "De eerste parameter is: "$1
echo -n "Wat is je naam? " ; read your_name
echo let op het verschil: "hi $your_name" # omsluiten door "
echo let op het verschil: 'hi $your_name' # omsluiten door '
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # als het bestand een directory is
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: grafisch bestand" ;;
    *.txt|*.tex) echo "${file}: tekstbestand" ;;
    *.c|*.f|*.for) echo "${file}: bronbestand" ;;
    *) echo "${file}: gewoon bestand" ;;
  esac
done
echo "er zijn ${DIRS} directory's en ${FILES} bestanden"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # exit code van het laatste commando
  echo "ZxY--!!!WKW niet gevonden"
fi
echo "genoeg... typ 'man bash' als je meer informatie wilt."

10.2 De Programmeertaal C

Onder UNIX is de systeemtaal C, je houdt ervan of niet. Andere talen zoals (Java, FORTRAN, Pascal, Lisp, Basic, Perl, awk...) zijn ook beschikbaar.

Er van uitgaand dat je de taal C kent, zijn hier een paar aanwijzingen voor degene die zijn verwend met Turbo C++ of één van de DOS-varianten. De C compiler van Linux wordt gcc genoemd en mist alle toeters en bellen die gewoonlijk bij overeenkomstige DOS programma's worden geleverd: geen IDE, on-line help, geïntegreerde debugger, enz. Het is alleen maar een command-line compiler, erg krachtig en efficiënt. Je standaard hello.c bestand kun je als volgt compileren:

$ gcc hello.c

hiermee wordt een uitvoerbaar bestand met de naam a.out aangemaakt.

Doe het volgende om het uitvoerbare bestand een andere naam te geven:

$ gcc -o hola hello.c

Om een library aan het programma te koppelen, voeg je de switch -l<libname> toe. Bijvoorbeeld, om de math library te linken:

$ gcc -o mathprog mathprog.c -lm

(De -l<libname> switch forceert gcc de library /usr/lib/lib<libname>.so te koppelen; dus -lm koppelt /usr/lib/libm.so).

Als je programma uit verschillende bronbestanden bestaat, zul je gebruik moeten maken van de utility make. Laten we ervan uitgaan dat je een expression parser hebt geschreven: het bronbestand heet parser.c en # bestaande uit twee header bestanden, parser.h en xy.h. Dan wil je gebruik maken van de routines in parser.c in een programma, stel calc.c, welke op zijn beurt bestaat uit # parser.h. Wat moet je nu doen om calc.c te compileren?

Je zult een zogenoemde makefile moeten schrijven, die de compiler vertelt welke afhankelijkheden er tussen de bron- en objectbestanden bestaan. In ons voorbeeld:


# Dit is makefile, gebruikt om calc.c te compileren
# Druk daar waar aangegeven de <TAB> toets in!

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# calc is afhankelijk van twee object bestanden: calc.o en parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o is afhankelijk van twee bronbestanden

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o is afhankelijk van drie bronbestanden

# einde van makefile.

Bewaar dit bestand als Makefile en typ make om je programma te compileren; Als alternatief, kun je het opslaan als calc.mak en typ dan make -f calc.mak, en natuurlijk LMP. Je kunt wat hulp over de C functies krijgen uit de man pages sectie 3; bijvoorbeeld,

$ man 3 printf

Om je programma's te debuggen, gebruik je gdb. info gdb om te leren hoe je 't kunt gebruiken.

Er zijn veel libraries beschikbaar; de eerste die je waarschijnlijk zult willen gebruiken zijn ncurses (tekstmode effecten), en svgalib (console graphics). Als je je sterk genoeg voelt om met X11 programmeren te beginnen (het is niet zo moeilijk) zijn er verscheidene library's die het schrijven van X11 programma's een stuk gemakkelijker maken. Ga eens naar http://www.xnet.com/~blatura/linapp6.html, in gedachten houdend dat Gtk een Linux standaard aan het worden is.

Veel van de editors kunnen zich gedragen als een IDE; emacs en jed, bijvoorbeeld, bieden ook syntax highlighting, automatisch inspringen, enz. Als alternatief kun je het package rhide van ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/ proberen. Het is een Borland IDE kloon, en de kans bestaat dat je het waardeert.


Verder Terug Inhoud