This file is indexed.

/usr/share/doc/HOWTO/de-html/DE-DOS-nach-Linux-HOWTO-7.html is in doc-linux-de 2003.10-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
 <TITLE>Von DOS nach Linux HOWTO : Ein wenig Programmierung</TITLE>
 <LINK HREF="DE-DOS-nach-Linux-HOWTO-8.html" REL=next>
 <LINK HREF="DE-DOS-nach-Linux-HOWTO-6.html" REL=previous>
 <LINK HREF="DE-DOS-nach-Linux-HOWTO.html#toc7" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-DOS-nach-Linux-HOWTO-8.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO-6.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO.html#toc7"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="s7">7.</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc7">Ein wenig Programmierung</A></H2>



<H2><A NAME="Shell Scripts"></A> <A NAME="ss7.1">7.1</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc7.1">Shell-Skripte: viel mehr als .BAT Dateien </A>
</H2>


<P>Falls Sie .BAT Dateien bisher benutzt haben, um lange Kommandoeingaben
abzuk&uuml;rzen (wie ich zum Beispiel), kann dies jetzt besser durch das
Einf&uuml;gen von Alias-Anweisungen (siehe obiges Beispiel) in die Dateien
<CODE>profile</CODE> oder <CODE>.profile</CODE> geschehen. Wenn Ihre .BAT Dateien jedoch
komplizierter sind, werden Sie die Skriptsprache, die von der Shell
bereitgestellt wird, m&ouml;gen: Sie ist so m&auml;chtig wie QBasic - wenn nicht noch
m&auml;chtiger. Sie hat Variablen, Strukturen wie while, for, case, if...
then... else, und vieles anderes. Sie ist eine gute Alternative zu einer
"echten" Programmiersprache.</P>
<P>Um ein Skript, das Gegenst&uuml;ck zu einer .BAT Datei unter DOS, zu schreiben,
mu&szlig; man lediglich eine ganz gew&ouml;hnliche ASCII-Datei erstellen, die die
gew&uuml;nschten Befehle enth&auml;lt, diese speichern und mit dem Kommando
<CODE>chmod +x &lt;skripdatei&gt;</CODE> ausf&uuml;hrbar machen. Man kann es dann wie jedes
andere Programm aufrufen.</P>
<P>Ein Hinweis: Der Systemeditor ist der <CODE>vi</CODE>, 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&auml;utern, da ich ihn nicht mag
und auch nicht benutze. Weitere Erl&auml;uterungen findet man dazu in Matt
Welsh's <EM>Linux installation...</EM> (englisch) oder jedem anderen Buch &uuml;ber
Linux/UNIX. Es ist vielleicht sinnvoll, sich einen anderen Editor zu
besorgen bzw. zu installieren, z.B. <CODE>joe</CODE> oder <CODE>emacs</CODE> f&uuml;r X. Zum 
<CODE>vi</CODE> nur soviel:</P>
<P>
<UL>
<LI> zum Text einf&uuml;gen nach dem Start: 'i' eingeben, dann den Text;</LI>
<LI> verlassen des <CODE>vi</CODE> ohne sichern, &lt;ESC&gt; eingeben, dann ':q!'</LI>
<LI> verlassen und sichern, &lt;ESC&gt; eingeben, dann ':wq'</LI>
<LI> zum weitereditieren nach einem &lt;ESC&gt; wieder 'i'</LI>
<LI> zwischenspeichern, &lt;ESC&gt; eingeben, dann ':w'</LI>
</UL>
</P>
<P>Skripte f&uuml;r die <CODE>bash</CODE> 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:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>

#!/bin/sh
# beispiel.sh
# Ich bin ein Kommentar
# die erste Zeile nicht &auml;ndern, sie mu&szlig; 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 &uuml;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&uuml;ckgabewert des letzten Kommandos
  echo "ZxY--!!!WKW nicht gefunden"
fi
echo "genug... 'man bash' eingeben f&uuml;r weitere Informationen."
</PRE>
</CODE></BLOCKQUOTE>
</P>

<H2><A NAME="ss7.2">7.2</A> <A HREF="DE-DOS-nach-Linux-HOWTO.html#toc7.2">Kurzer Blick auf C</A>
</H2>


<P>Unter UNIX ist die Programmiersprache des Systems C, ob es einem gef&auml;llt
oder nicht. Zur Programmierung von Programmen gibt es jedoch auch eine
gro&szlig;e Anzahl anderer Sprachen, z.B. FORTRAN, Pascal, Lisp, Basic, Perl,
awk uva. .</P>
<P>Hier sind ein paar Hilfestellungen f&uuml;r die, die C bereits beherrschen und
von Programmen wie Turbo C++ o.&auml;. verw&ouml;hnt wurden. Der C-Kompiler unter
Linux hei&szlig;t <CODE>gcc</CODE> und hat keinerlei der netten Features, wie sie unter
DOS und Windows &uuml;blich sind: keine IDE, keine Online-Hilfe, kein
integrierter Debugger usw. Es ist nur ein reiner Kommandozeilenkompiler
der jedoch sehr leistungsf&auml;hig und effizient ist. Da er auch auf vielen
anderen Unixsystemen verf&uuml;gbar ist, arbeiten viele Leute lieber mit ihm,
als mit dem zu ihrem System standardm&auml;&szlig;ig ausgelieferten Kompiler.
Um sein Standardprogramm <CODE>hello.c</CODE> zu kompilieren, gibt man ein:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc hello.c
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Das ergibt eine ausf&uuml;hrbare Datei namens <CODE>a.out</CODE>. Um dieser Datei gleich
einen anderen Namen geben zu lassen (z.B. hallo) gibt man ein
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -o hallo hello.c
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Um eine Bibliothek an ein Programm zu linken, f&uuml;gt man den Parameter
-l&lt;libname&gt; hinzu. Zum Linken der Mathebibliothek zum Beispiel:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ gcc -o mattteprog matteprog.c -lm
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>(Der <CODE>-l&lt;libname&gt;</CODE> Parameter veranla&szlig;t <CODE>gcc</CODE> die Bibliothek 
<CODE>/usr/lib/lib&lt;libname&gt;.a</CODE> zu linken; also linkt <CODE>-lm</CODE> 
<CODE>/usr/lib/libm.a</CODE>).</P>
<P>So weit so gut. Wenn das Programm jedoch aus mehreren Quelldateien besteht,
wird der Einsatz des Hilfsprogrammes <CODE>make</CODE> sinnvoll. Angenommen man hat
einen Parser f&uuml;r Ausdr&uuml;cke geschrieben: die Quelldatei ist <CODE>parser.c</CODE>
und beinhaltet per #include zwei Headerdateien, <CODE>parser.h</CODE> und
<CODE>xy.h</CODE>. Jetzt will man die Routinen aus <CODE>parser.c</CODE> in einem Programm,
sagen wir <CODE>calc.c</CODE>, verwenden, welches seinerseits per #include
<CODE>parser.h</CODE> enth&auml;lt. Ein ziemliches Durcheinander! Was mu&szlig; man machen, um
<CODE>calc.c</CODE> zu kompilieren?</P>
<P>In diesem Falle schreibt man ein sogenanntes <CODE>makefile</CODE>, welches dem
Kompiler Auskunft &uuml;ber die Abh&auml;ngigkeiten zwischen den Quell- und
Objektdateien gibt. In unserem Falle:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>

# Dies ist ein makefile zum kompilieren von calc.c
# &lt;TAB> muss durch das Tabulator-Zeichen ersetzt werden!

calc: calc.o parser.o
&lt;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
&lt;TAB>gcc -c calc.c
# calc.o basiert auf zwei Quelldateien

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

# ende des makefile.
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Abspeichern als Datei <CODE>makefile</CODE> und eingeben</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ make
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>um das Programm zu kompilieren, oder als <CODE>calc.mak</CODE> speichern und 
eingeben</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ make -f calc.mak
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P><CODE>make</CODE> sucht automatisch (wenn kein anderer Name per Option <CODE>-f</CODE>
angegeben wird) nach einer Datei namens <CODE>Makefile</CODE> oder <CODE>makefile</CODE> im
aktuellen Verzeichnis als Datei mit den Abh&auml;ngigkeiten. Auch hier wieder
MSL.</P>
<P>Man kann sich bez&uuml;glich der C-Funktionen Hilfe anzeigen lassen. Sie sind im
Manual, Abschnitt 3 beschrieben. Beispiel:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
$ man 3 printf
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Dar&uuml;ber hinaus gibt es noch viele weitere Bibliotheken, die das
Programmieren erleichtern. Darunter sind z.B. <CODE>ncurses</CODE>, mit der man
Textmodus-Programme erstellen kann, <CODE>svgalib</CODE> um Grafik auch ohne
X-Windows zu verwenden, sowie viele andere. Wer noch einen Schritt
weitergehen m&ouml;chte, kann sich an die Programmierung von X-Windows
heranwagen. Auch daf&uuml;r gibt es viele Bibliotheken, die die Programmierung
unter X vereinfachen, wie z.B.: </P>
<P>
<DL>

<DT><B>XForms</B><DD>
<P>
<BLOCKQUOTE><CODE>
<A HREF="ftp://einstein.phys.uwm.edu/pub/xforms">einstein.phys.uwm.edu/pub/xforms</A></CODE></BLOCKQUOTE>
 </P>

<DT><B>MGUI</B><DD>
<P>
<BLOCKQUOTE><CODE>
 
<A HREF="http://www.volftp.vol.it/IT/IT/ITALIANI/MORELLO/index.htm">www.volftp.vol.it/IT/IT/ITALIANI/MORELLO/index.htm</A></CODE></BLOCKQUOTE>
</P>

<DT><B>LessTif</B><DD>
<P><CODE> 
<A HREF="http://www.hungry.com/">www.hungry.com</A></CODE>: Eine Bibliothek, die als freier Ersatz des
kommerziellen Motif gedacht ist, welches die Standardbibliothek f&uuml;r
grafische Programmierung unter UNIX ist. LessTif ist zum jetzigen
Zeitpunkt (Oktober 1997) noch nicht ganz fertig, aber trotzdem schon
weitgehend benutzbar. </P>

<DT><B>Qt</B><DD>
<P><CODE>
<A HREF="http://www.troll.no/">www.troll.no</A></CODE>: Auf dieser Bibliothek basiert der 
<A HREF="http://www.kde.org">KDE</A>, oben erw&auml;hnter Desktop, der alle
Chancen hat, der Standard unter Linux zu werden.</P>

</DL>
 </P>
<P>Mehr Informationen &uuml;ber Bibliotheken und Programmiertools im allgemeinen
gibt es unter: 
<BLOCKQUOTE><CODE>
<A HREF="http://www.xnet.com/~blatura/linapp6.html">http://www.xnet.com/~blatura/linapp6.html</A></CODE></BLOCKQUOTE>
</P>
<P>Es gibt viele Editoren, die wie eine IDE arbeiten k&ouml;nnen: <CODE>emacs</CODE> und
<CODE>jed</CODE> zum Beispiel haben auch Syntax Highlighting, automatische
Einr&uuml;ckung und so weiter.</P>
<P>Wenn man unbedingt eine IDE wie unter den Borlandprodukten haben will, kann
man sich z.B. die Pakete <CODE>rhide</CODE> von 
<BLOCKQUOTE><CODE>
<A HREF="ftp://sunsite.unc.edu:/pub/Linux/devel/debuggers/">sunsite.unc.edu:/pub/Linux/devel/debuggers/</A></CODE></BLOCKQUOTE>
 oder <CODE>xwpe</CODE>
von 
<BLOCKQUOTE><CODE>
<A HREF="ftp://sunsite.unc.edu:/pub/Linux/apps/editors/">sunsite.unc.edu:/pub/Linux/apps/editors/</A></CODE></BLOCKQUOTE>
 anschauen. Es wird
Ihnen wahrscheinlich gefallen.</P>

<HR>
<A HREF="DE-DOS-nach-Linux-HOWTO-8.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO-6.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-DOS-nach-Linux-HOWTO.html#toc7"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>