Inhalt

10. Ein wenig Programmierung

10.1 Shell-Skripte: viel mehr als .BAT Dateien

Falls Sie .BAT Dateien bisher benutzt haben, um lange Kommandoeingaben abzukürzen (wie ich zum Beispiel), kann dies jetzt besser durch das Einfügen von Alias-Anweisungen (siehe obiges Beispiel) in die Dateien profile oder .bash_profile geschehen. Wenn Ihre .BAT Dateien jedoch komplizierter sind, werden Sie die Skriptsprache, die von der Shell bereitgestellt wird, mögen: Sie ist so mächtig wie QBasic - wenn nicht noch mächtiger. Sie hat Variablen, Strukturen wie while, for, case, if... then... else, und vieles anderes. Sie ist eine gute Alternative zu einer »echten« Programmiersprache.

Um ein Skript, das Gegenstück zu einer .BAT Datei unter DOS, zu schreiben, muß man lediglich eine ganz gewöhnliche ASCII-Datei erstellen, welche die gewünschten Befehle enthält, diese speichern und mit dem Kommando chmod +x <skripdatei> ausführbar machen. Man kann es dann wie jedes andere Programm mit seinem Dateinamen aufrufen.

Ein Hinweis: Der Systemeditor ist der vi, und nach meiner Erfahrung sind neue Nutzer selten davon erbaut, da sie ihn als schwer zu bedienen empfinden. Ich werde ihn hier nicht weiter erläutern; Informationen findet man dazu in Matt Welsh's englischem Buch oder einem anderen Buch über Linux/UNIX. Zum vi daher nur soviel:

Ein guter Editor für Anfänger ist joe: Wenn man ihn mit jstar aufruft, kennt er dieselben Tastenkombinationen wie der DOS/Windows Editor. jed im WordStar oder IDE Modus ist noch besser. Im Abschnitt Wo es weitere Programme gibt wird beschrieben wo man die Editoren herbekommt (falls sie nicht ohnehin Bestandteil der Distribution sind).

Skripte für die bash zu schreiben ist ein weites Feld, und ich will hier nicht weiter darauf eingehen. Hier nur ein Beispiel eines Shell-Skriptes, aus dem man einige grundlegende Dinge erkennen kann:

#!/bin/sh
# beispiel.sh
# Ich bin ein Kommentar
# die erste Zeile nicht ändern, sie muß genau so dastehen
echo "Dieses System ist: `uname -a`" # Verwendet Ausgabe des Kommandos
echo "Mein Name ist $0" # vordefinierte Variablen
echo "Dem Script wurden die folgenden $# Parameter übergeben: "$*
echo "Erster Parameter ist: "$1
echo -n "Ihr Name? " ; read ihr_name
echo Unterschied beachten: "hi $ihr_name" # einklammern mit "
echo Unterschied beachten: 'hi $ihr_name' # einklammern mit '
VERZE=0 ; DATEIEN=0
for datei in `ls .` ; do
  if [ -d ${datei} ] ; then # wenn datei ein Verzeichnis ist
    VERZE=`expr $VERZE + 1`  # VERZE = VERZE + 1
  elif [ -f ${datei} ] ; then
    DATEIEN =`expr $DATEIEN + 1`
  fi
  case ${datei} in
    *.gif|*jpg) echo "${datei}: Bilddatei" ;;
    *.txt|*.tex) echo "${datei}: Textdatei" ;;
    *.c|*.f|*.for) echo "${datei}: Quelldatei" ;;
    *) echo "${datei}: allgemeine Datei" ;;
  esac
done
echo "es gibt ${VERZE} Verzeichnisse und ${DATEIEN} Dateien"
ls | grep "ZxY--%%WKW"
if [ $? != 0 ] ; then # Rückgabewert des letzten Kommandos
  echo "ZxY--%%WKW nicht gefunden"
fi
echo "genug... 'man bash' eingeben für weitere Informationen."

10.2 Kurzer Blick auf C

Unter UNIX ist die Programmiersprache des Systems C, ob es einem gefällt oder nicht. Es gibt jedoch zur Programmierung von Programmen auch eine große Anzahl anderer Sprachen, z.B. Java, FORTRAN, Pascal, Lisp, Basic, Perl, awk u.v.a.

Hier sind ein paar Hilfestellungen für die, die C bereits beherrschen und von Programmen wie Turbo oder Visual C++ verwöhnt wurden. Der C-Compiler unter Linux heißt gcc und hat keines der netten Features wie sie unter DOS und Windows üblich sind: keine IDE, keine Online-Hilfe, kein integrierter Debugger usw. Es ist nur ein reiner Kommandozeilencompiler der jedoch sehr leistungsfähig und effizient ist. Um das Standard-Programm hello.c zu kompilieren, gibt man ein:

$ gcc hello.c

Das ergibt eine ausführbare Datei namens a.out. Um dieser Datei gleich einen anderen Namen zu geben (z.B. hallo) gibt man ein

$ gcc -o hallo hello.c

Um eine Bibliothek an ein Programm zu linken, fügt man den Parameter - l<libname> hinzu. Zum Linken der Mathebibliothek zum Beispiel:

$ gcc -o matheprog matheprog.c -lm

(Der -l<libname> Parameter veranlaßt gcc die Bibliothek /usr/lib/lib<libname>.so hinzuzulinken; also linkt -lm /usr/lib/libm.so).

So weit so gut. Wenn das Programm jedoch aus mehreren Quelldateien besteht, wird der Einsatz des Hilfsprogramms make sinnvoll. Angenommen man hat einen Parser für Ausdrücke geschrieben: die Quelldatei ist parser.c und beinhaltet per #include zwei Headerdateien, parser.h und xy.h. Jetzt will man die Routinen aus parser.c in einem Programm, sagen wir calc.c, verwenden, welches seinerseits per #include parser.h enthält. Ein ziemliches Durcheinander! Was muß man machen, um calc.c zu kompilieren?

In diesem Falle schreibt man ein sogenanntes Makefile, welches dem Compiler Auskunft über die Abhängigkeiten zwischen den Quell- und Objektdateien gibt. In unserem Falle:

# Dies ist ein Makefile zum Kompilieren von calc.c
# <TAB> muß durch das Tabulator-Zeichen ersetzt werden!

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# calc basiert auf zwei Objektdateien: calc.o und parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o basiert auf zwei Quelldateien

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o basiert auf drei Quelldateien

# Ende des Makefile.

Abspeichern als Datei Makefile und make eingeben um das Programm zu kompilieren. Alternativ kann man es auch z.B. unter calc.mak und dann make -f calc.mak eingeben. Auch hier wieder MSL.

Man kann sich bezüglich der C-Funktionen Hilfe anzeigen lassen. Sie werden in den oben erwähnten »man pages«, Abschnitt 3, beschrieben. Beispiel:

$ man 3 printf

Zum debuggen der Programme gibt's den gdb. info gdb gibt mehr Informationen dazu aus.

Darüber hinaus gibt es noch viele weitere Bibliotheken, die das Programmieren erleichtern. Darunter sind z.B. ncurses, mit der man Textmodus- Programme erstellen kann, svgalib um Grafik auch ohne X Window zu verwenden, sowie viele andere.

Viele Editoren arbeiten gleichzeitig als IDE: emacs und jed z.B. bieten Syntax-Highlighting, automatische Einrückungen usw. Man kann sich auch das Packet rhide via ftp von

metalab.unc.edu:/pub/Linux/devel/debuggers/
besorgen. Es ist der Borland IDE nachempfunden, und Sie werden es wahrscheinlich mögen.

10.3 X11 Programmierung

Wer noch einen Schritt weitergehen möchte, kann sich an die Programmierung von X Window heranwagen (es ist nicht so schwer). Auch hier gibt es viele Bibliotheken, welche die Programmierung unter X11 vereinfachen. Die wichtigsten Plätze denen man einen Besuch abstatten sollte sind die des GTK+, www.gtk.org, und Qt, www.troll.no.

Gtk+ ist eine auf C basierende Widgetbibliothek, die ursprünglich für das Grafikpaket »The GIMP« ( www.gimp.org) geschrieben wurde und auf der die grafische Umgebung GNOME basiert. Qt dagegen basiert auf C++ und ist die Grundlage für KDE. Wahrscheinlich wird man eine der beiden Bibliotheken verwenden.

Einige der besten Werkzeuge für eine visuelle Programmierung sind z.B. Kdevelop für Qt, www.kdevelop.org, und Glade für Gtk+, glade.pn.org. Mehr Informationen dazu gibt es unter

www.free-soft.org/guitool

Multiplatform-Programmierung

Wäre es nicht gut Programme zu schreiben, die sich mit dem gcc problemlos unter Linux und Windows kompilieren ließen? Zum Zeitpunkt des Schreibens dieses Artikels gibt es einige Widgetbibliotheken, die eine mehr oder weniger stabile Multiplattform-Programmierung bieten. Was Stabilität und Vollständigkeit angeht dürfte wohl FLTK, das »Fast Light Tool Kit«, unter www.fltk.org die erste Wahl sein. Es ist erstaunlich klein, schnell und stabil. Es hat auch einen halb-visuellen Builder mit Namen »Fluid«. Es gibt auch eine Multiplatform- Version der Qt-Bibliothek, aber dafür wollen die Autoren Bares sehen.


Inhalt