Inhalt

7. Ein wenig Programmierung

7.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 .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, die 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 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, da ich ihn nicht mag und auch nicht benutze. Weitere Erläuterungen findet man dazu in Matt Welsh's Linux installation... (englisch) oder jedem anderen Buch über Linux/UNIX. Es ist vielleicht sinnvoll, sich einen anderen Editor zu besorgen bzw. zu installieren, z.B. joe oder emacs für X. Zum vi nur soviel:

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`" # Nutzung der Ausgabe des Kommandos
echo "Mein Name ist $0" # vordefinierte Variablen
echo "Es 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 '
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then # falls file ein Verzeichnis
    DIRS=`expr $DIRS + 1`  # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: Bildateien" ;;
    *.txt|*.tex) echo "${file}: Textdateien" ;;
    *.c|*.f|*.for) echo "${file}: Quelldateien" ;;
    *) echo "${file}: allgemeine Dateien" ;;
  esac
done
echo "es gibt ${DIRS} Verzeichnisse und ${FILES} 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."

7.2 Kurzer Blick auf C

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

Hier sind ein paar Hilfestellungen für die, die C bereits beherrschen und von Programmen wie Turbo C++ o.ä. verwöhnt wurden. Der C-Kompiler unter Linux heißt gcc und hat keinerlei 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 Kommandozeilenkompiler der jedoch sehr leistungsfähig und effizient ist. Da er auch auf vielen anderen Unixsystemen verfügbar ist, arbeiten viele Leute lieber mit ihm, als mit dem zu ihrem System standardmäßig ausgelieferten Kompiler. Um sein Standardprogramm 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 geben zu lassen (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 mattteprog matteprog.c -lm

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

So weit so gut. Wenn das Programm jedoch aus mehreren Quelldateien besteht, wird der Einsatz des Hilfsprogrammes 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 Kompiler Auskunft über die Abhängigkeiten zwischen den Quell- und Objektdateien gibt. In unserem Falle:


# Dies ist ein makefile zum kompilieren von calc.c
# <TAB> muss 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 eingeben

$ make

um das Programm zu kompilieren, oder als calc.mak speichern und eingeben

$ make -f calc.mak

make sucht automatisch (wenn kein anderer Name per Option -f angegeben wird) nach einer Datei namens Makefile oder makefile im aktuellen Verzeichnis als Datei mit den Abhängigkeiten. Auch hier wieder MSL.

Man kann sich bezüglich der C-Funktionen Hilfe anzeigen lassen. Sie sind im Manual, Abschnitt 3 beschrieben. Beispiel:

$ man 3 printf

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-Windows zu verwenden, sowie viele andere. Wer noch einen Schritt weitergehen möchte, kann sich an die Programmierung von X-Windows heranwagen. Auch dafür gibt es viele Bibliotheken, die die Programmierung unter X vereinfachen, wie z.B.:

XForms

einstein.phys.uwm.edu/pub/xforms

MGUI

www.volftp.vol.it/IT/IT/ITALIANI/MORELLO/index.htm

LessTif

www.hungry.com: Eine Bibliothek, die als freier Ersatz des kommerziellen Motif gedacht ist, welches die Standardbibliothek für grafische Programmierung unter UNIX ist. LessTif ist zum jetzigen Zeitpunkt (Oktober 1997) noch nicht ganz fertig, aber trotzdem schon weitgehend benutzbar.

Qt

www.troll.no: Auf dieser Bibliothek basiert der KDE, oben erwähnter Desktop, der alle Chancen hat, der Standard unter Linux zu werden.

Mehr Informationen über Bibliotheken und Programmiertools im allgemeinen gibt es unter:

http://www.xnet.com/~blatura/linapp6.html

Es gibt viele Editoren, die wie eine IDE arbeiten können: emacs und jed zum Beispiel haben auch Syntax Highlighting, automatische Einrückung und so weiter.

Wenn man unbedingt eine IDE wie unter den Borlandprodukten haben will, kann man sich z.B. die Pakete rhide von

sunsite.unc.edu:/pub/Linux/devel/debuggers/
oder xwpe von
sunsite.unc.edu:/pub/Linux/apps/editors/
anschauen. Es wird Ihnen wahrscheinlich gefallen.


Inhalt