Nästa Föregående Innehållsförteckning

8. Lite programmering

8.1 Skal-program: .BAT-filer på anabola

Om du använde .BAT-filer för att skapa genvägar till långa kommando- rader (jag gjorde det en massa), så kan du göra detta genom att ange lämpliga alias-rader (se exempel ovan) i profile eller .profile. Men om dina .BAT-filer var mera komplicerade så kommer du älska skal- programmerings-språken som finns i varje skal: de är kraftfulla som QBasic, om inte kraftfullare. De har variabler, konstruktioner som while, for, case, if... then... else och en massa andra egenskaper: de kan vara bra alternativ till "riktiga" programmerings-språk.

För att skriva ett skal-program, motsvarigheten till .BAT-filer under DOS, så är allt du behöver göra att skriva en vanlig ASCII-fil, som innehåller instruktioner, spara den och göra den körbar, med kommandot chmod +x <skal-program-fil>. För att köra den, skriv dess namn.

Ett varningens ord är här på sin plats. System-editorn heter vi, och enligt mina erfarenheter så finner de flesta nybörjare den väldigt svår att använda. Jag tänker inte förklara hur du ska använda den, för jag gillar den inte och använder den inte, så nu vet du det. Det räcker med att jag säger följande här:

En bra editor för nybörjare är joe: anropar du den genom att skriva jstar, så får du samma tangent-kombinationer som DOS-editorn. jed i WordStar- eller IDE-läge är annu bättre. Se avsnittet Var du får tag på program för att få reda på var du kan få tag på dessa editorer.

Att skriva skal-program under bash är ett så stort ämne att det tar en bok själv, och jag tänker inte gå djupare in på ämnet. Jag ger bara ett exempel på ett skal-program, från vilket du kan lära dig vissa grundläggande regler:


#!/bin/sh
# sample.sh
# jag är en kommentar
# ändra inte första raden; den måste vara där
echo "Systemet är: `uname -a`" # använd utdatan från kommandot
echo "Mitt namn är $0" # inbyggda variabler
echo "Du gav mig följande $# parametrar: "$*
echo "Den första parametern är: "$1
echo -n "Vad heter du? " ; read ditt_namn
echo observera skillnaden: "hej $ditt_namn" # citerar med "
echo observera skillnaden: 'hej $ditt_namn' # citerar med '
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # om filen är en katalog
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: grafik-fil" ;;
    *.txt|*.tex) echo "${file}: text-fil" ;;
    *.c|*.f|*.for) echo "${file}: källkods-fil" ;;
    *) echo "${file}: vanlig fil" ;;
  esac
done
echo "det finns ${DIRS} kataloger och ${FILES} filer"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # sista kommandots exit-kod
  echo "ZxY--!!!WKW inte funnen"
fi
echo "det räcker... skriv 'man bash' för mer info."

8.2 C själv

Under UNIX är C system-språket, vare sig du gillar det eller ej. Massor av andra språk (FORTRAN, Pascal, Lisp, Basic, Perl, awk...) finns också tillgängliga.

Om vi förutsätter att du kan lite om C, så kommer här några regler för de av er som har blivit bortskämda med Turbo C++ eller någon av dess släktingar under DOS. Linux C-kompilator heter gcc och saknar alla de "flashiga" egenskaper som vanligtvis finns med i DOS motsvarigheter: ingen IDE, on-line hjälp, integrerad avlusare osv. Det är bara en rå kommando-rads-kompilator, som är väldigt kraftfull och effektiv. För att kompilera det gamla goda hello.c, skriver du:

$ gcc hello.c

vilket skapar en körbar fil som heter a.out. För att ge det körbara programmet ett annat namn skriver vi

$ gcc -o hola hello.c

För att länka in ett bibliotek i programmet, lägg till switchen -l<biblioteksnamn>. T.ex., för att länk in matematik-biblioteket, skriv:

$ gcc -o mathprog mathprog.c -lm

(--l<biblioteksnamn>-switchen tvingar gcc att länka in biblioteket /usr/lib/lib<bibltioteksnamn>.a, så -lm änkar in /usr/lib/libm.a).

Så långt är allt gott. Men när du har ett program som består av flera källkods-filer, så kommer du att behöva använda make-verktyget. Låt oss förutsätta att du har skrivit en uttrycks-tolkare: dess källkods- fil heter tolkare.c och #inkluderar två "header"-filer, tolkare.h och xy.h. Sen vill du använda rutinen tolkare.c i ett program, säg kalk.c, vilket i sin tur #inkluderar tolkare.h. Vilken röra! Vad måste du nu göra för att kompilera kalk.c?

Du blir tvungen att skriva en så kallad makefile, vilken talar om för kompilatorn vilka "beroenden" som finns mellan källkod och objekt-filer. I vårt exempel:


# Det här är en makefile, vilken används för att kompilera kalk.c
# Använd TAB-tangenten där det är lämpligt!

kalk:     kalk.o tolkare.o
<TAB>gcc -o kalk kalk.o tolkare.o -lm
# kalk beror av två objekt-filer: kalk.o och tolkare.o

kalk.o:   kalk.c tolkare.h
<TAB>gcc -c kalk.c
# kalk.o beror av två källkods-filer

tolkare.o:   tolkare.c tolkare.h xy.h
<TAB>gcc -c tolkare.c
# tolkare.o beror av tre källkods-filer

# slut på makefile.

Spara denna fil som Makefile och skriv make för att kompilera ditt program; som alternativ kan du spara den som kalk.mak och skriva make -f kalk.mak, och naturligtvis ska du LMS. Du kan anropa hjälp om C-funktionerna, som avhandlas av man-sidorna, sektion 3, t.ex.:

$ man 3 printf

För att avlusa dina program, använd gdb. info gdb lär dig hur du ska använda det.

Det finns en massa bibliotek tillgängliga där ute; bland de första du kommer vilja använda finns ncurses, som tar hand om olika effekter i text-läge, och svgalib, som kan fixa grafik. Om du känner dig till- räckligt tuff för att tackla X-programmering, finns det bibliotek som de ovan nämnda XForms, Qt, Gtk och många andra, med vilka du lätt kan skriva X11-program. Ta en titt på http://www.xnet.com/~blatura/linapp6.html .

Många editorer kan fungera som ett IDE; emacs och jed, t.ex., och även ge sådana funktioner som syntax-markering, automatisk indentering osv. Alternativet är att skaffa rhide-paketet från ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/. Det är en kopia av Borlands IDE, och det finns vissa möjligheter att du kommer att gilla det.


Nästa Föregående Innehållsförteckning