Kapitel 8. Programmering under Linux

Indholdsfortegnelse
8.1. Shell-programmering
8.2. C og C++ programmering
8.3. Perl programmering
8.4. Tcl/Tk
8.5. Python
8.6. Java

For den, der har lyst til at udvikle programmer, er Linux det rene paradis. Der er masser af programmeringssprog og værktøjer at vælge mellem. Langt det meste er af rigtig høj kvalitet og selvfølgelig frit tilgængeligt. Der er i øvrigt mange andre muligheder end dem, vi kommer ind på her, så hvis dit bestemte yndlingssprog ikke er nævnt her, betyder det langtfra, at det ikke findes til Linux. Selv GUI baserede udviklingsmiljøer er der, eller hurtigt på vej. Seneste nyt er, at Inprise (tidligere Borland) vil frigive Delphi til Linux. Godt nok findes Microsoft Visual C++ ikke til Linux (og det kommer nok heller ikke), men læs videre. Du vil se at KDevelop ligner meget.

8.1. Shell-programmering

Hvis du ofte har brug for at køre nogle bestemte programmer for at håndtere en tilbagevendende opgave, bør du sætte dig ind i at skrive shell-scripts. Kender du til batch-filer under DOS, har du en ide om, hvad det går ud på. Et shell-script er i bund og grund blot en tekstfil, der indeholder en række kommandoer og måske nogle ekstra linjer til at vælge hvilke dele af scriptet, der skal udføres.

Det første eksempel på et shell-script bør være "Hello World", som skriver en tekst på skærmen.

#!/bin/sh
echo "Hello World"

Dette gemmes under navnet HelloWorld eller lignende, og derefter gøres filen eksekverbar med chmod +x HelloWorld. Du kan nu teste eksemplet ved at skrive HelloWorld på en kommando linje (f.eks. i en xterm).

Et eksempel kunne være, at du fandt ud af, at du ofte havde brug for en nem metode til at tage en hurtig kopi af tekstfilerne i arbejdskataloget.

#!/bin/sh
echo "Starter backup..."
mkdir backup
cp *.txt backup
echo "Backup slut"

Gem denne tekst i en fil med navnet bu (for "back up"), og gør den eksekverbar med kommandoen chmod +x bu. Nu kan du køre bu fra kommandolinjen:

$ ./bu
Starter backup...
Backup slut

Første linje i scriptet er egentlig en kommentar, men giver samtidig systemet besked om, at dette er et shell-script og ikke f.eks. et perl-script.

Hvis du er lidt forsigtig anlagt og gerne vil undgå at komme til at overskrive en eksisterende backup, kan du udvide scriptet en smule:

#!/bin/sh
echo "Starter backup..."
mkdir backup
if [ $? -eq 0 ]
then
    echo "kataloget ./backup oprettet..."
else
    echo "kataloget ./backup kunne IKKE oprettes"
    echo "bu afsluttes"
    exit 1
fi
cp -v *.txt backup
echo "bu slut"

I linje 4 i scriptet støder vi på en såkaldt shell-variabel, nemlig $?, der betyder "resultatet af sidst udførte kommando". Her bruges den til at vise, om mkdir lykkedes eller ej. I dette eksempel går vi enfoldigt ud fra, at hvis kommandoen mkdir backup ikke lykkedes, er det, fordi kataloget backup eksisterer i forvejen.

Hvis vi så finder ud af, at vi af og til har brug for at overskrive en backup, kan vi ændre vores script en smule, så vi ved at tilføje -O på kommandolinjen kan få den til at være ligeglad med, om kataloget findes i forvejen:

#!/bin/sh
echo "Starter backup..."
mkdir backup
if [ $? -eq 0 ]
then
    echo "kataloget ./backup oprettet..."
else
    echo "kataloget ./backup kunne IKKE oprettes"
    OVERWRITE="-O"
    if [ $# -eq 1 ]
    then
    if [ $1 != $OVERWRITE ]
	  then
        echo "bu afsluttes"
	  exit 1
        else
            echo "der overskrives..."
        fi
    else
        echo "bu afsluttes"
        exit 1
    fi
fi
cp -v *.txt backup
echo "bu slut"

Du kan faktisk nå temmelig langt ved hjælp af shell-scripts, men det kan hurtigt blive lidt kryptisk at læse. Kunsten er nok i virkeligheden at stoppe, mens legen er god, og vælge et "rigtigt" programmeringssprog, når opgaven kræver det. Alligevel bør du lære at skrive shell-scripts, dels for at lave dine egne små praktiske løsninger på dagligdagens problemer, dels for at kunne forstå andres scripts.