Kleine Verbesserungen, neue Kommandos exec und type.

This commit is contained in:
rschaten
2005-02-22 21:30:40 +00:00
parent f72918f75d
commit 577cdbfcd1
5 changed files with 127 additions and 35 deletions

View File

@@ -555,10 +555,10 @@ unter \lstinline|/bin/sh| die entsprechende Shell (in diesem Fall die
Bourne-Shell) liegt. Dieser Eintrag wirkt nur dann, wenn er in der ersten Zeile
und der ersten Spalte des Skripts steht.
Dieser Mechanismus ist bei der Bourne-Shell nicht vorhanden, er wurde mit den
moderneren Shells eingeführt um eben durch die Angabe von \lstinline|#!/bin/sh|
die Bourne-Shell für die Ausführung von Shell-Skripten benutzen zu können. In
der Bourne-Shell wirkt das führende \verb\#\ als Kommentarzeichen.
Dieser Mechanismus wurde mit dem Aufkommen modernerer Shells eingeführt um eben
durch die Angabe von \lstinline|#!/bin/sh| die Bourne-Shell für die Ausführung
von Shell-Skripten benutzen zu können. Interpretiert wird die Zeile vom Kernel,
in der Shell selbst wirkt das führende \verb\#\ als Kommentarzeichen.
\index{Shell>Auswahl der\ldots|)}
@@ -629,21 +629,24 @@ count () {
\subsection{Bedingungen (\texttt{[ ]})}\label{bedingungen}\index{Bedingungen|see{test}}\index{[ ]=\texttt{[ ]}|see{test}}\index{test=\texttt{test}|(textbf}
Da die Standard-Shell keine arithmetischen oder logischen Ausdrücke auswerten
kann\footnote{\texttt{if} und Konsorten prüfen nur den
Ursprünglich konnte die Standard-Shell keine arithmetischen oder logischen
Ausdrücke auswerten\footnote{\texttt{if} und Konsorten prüfen nur den
Rückgabewert\index{Rückgabewert} eines aufgerufenen Programmes~--~0 bedeutet
`true', alles andere bedeutet `false', siehe auch \ref{exitcode}.}, muß dazu
ein externes Programm benutzt werden. Dieses Programm heißt
\verb\test\\index{test=\texttt{test}}. Üblicherweise besteht auf allen Systemen
auch noch ein Link namens \verb\[\ auf dieses Programm. Dieser Link ist fast
absolut gleichwertig zu benutzen (in dieser Form wird allerdings eine
abschließende Klammer nach der Bedingung erwartet). Dementsprechend ist es auch
zwingend erforderlich, nach der Klammer ein Leerzeichen zu schreiben. Das dient
dazu, Bedingungen in \verb\if\-Abfragen u. ä. lesbarer zu machen.
`true', alles andere bedeutet `false', siehe auch \ref{exitcode}.}. Für diese
Aufgabe mußte ein externes Programm benutzt werden, heutzutage ist der Befehl
in die Shell integriert.
Das \verb\test\-Programm bietet sehr umfangreiche Optionen an. Dazu gehören
Dateitests und Vergleiche von Zeichenfolgen oder ganzen Zahlen. Diese
Bedingungen können auch durch Verknüpfungen kombiniert werden.
Dieser Befehl heißt \verb\test\\index{test=\texttt{test}}. Üblicherweise
steht er auf allen Systemen auch noch unter dem Namen \verb\[\ zur Verfügung.
Diese Variante ist fast absolut gleichwertig zu benutzen (in dieser Form wird
allerdings eine abschließende Klammer nach der Bedingung erwartet).
Dementsprechend ist es auch zwingend erforderlich, nach der Klammer ein
Leerzeichen zu schreiben. Das dient dazu, Bedingungen in \verb\if\-Abfragen u.
ä. lesbarer zu machen.
\verb\test\ bietet sehr umfangreiche Optionen an. Dazu gehören Dateitests und
Vergleiche von Zeichenfolgen oder ganzen Zahlen. Diese Bedingungen können auch
durch Verknüpfungen kombiniert werden.
\medskip\medskip\emph{Dateitests:}\index{Dateitests}\nopagebreak
\LTXtable{\textwidth}{tab_bedingungen_dateitests.tex}
@@ -883,6 +886,35 @@ while [ $i -le 100 ]; do
done
\end{lstlisting}
Ein weiterer typischer Anwendungsfall ist das zeilenweise Bearbeiten einer
Eingabedatei. Dabei kann es sich entweder um eine einfache Textdatei handeln,
oder um die Ausgabe eines anderen Kommandos.
Um die Ausgabe eines anderen Kommandos zu verarbeiten kann \texttt{while} als
Teil einer Pipeline geschrieben werden:
\begin{lstlisting}
# "hallo" suchen und umstaendlich ausgeben:
grep "hallo" datei.txt | while read zeile; do
echo "Fundstelle: $zeile"
done
\end{lstlisting}
Wenn die Eingabe als Textdatei vorliegt ist es verlockend, diese einfach
mittels \texttt{cat} auszugeben und per Pipe in die Schleife zu schicken.
Allerdings sollte an dieser Stelle eine Umleitung benutzt werden. So vermeidet
man den überflüssigen Start des Kommandos \texttt{cat}:
\begin{lstlisting}
# Zahlen aus einer Datei lesen und aufsummieren:
summe=0
while read zeile; do
summe=`expr $summe + $zeile`
done < datei.txt
echo "Summe: $summe"
\end{lstlisting}
\index{while=\texttt{while}|)}
@@ -989,7 +1021,9 @@ Funktion ausgef
\index{\&=\texttt{\&}|(textbf}\index{;=\texttt{;}|(textbf}\index{( )=\texttt{( )}|(textbf}\index{\{ \}=\texttt{\{ \}}|(textbf}\index{Pipe|(textbf}\index{Backticks|(textbf}\index{\&\&=\texttt{\&\&}|(textbf}\index{!|!|=\texttt{!|!|}|(textbf}\index{Befehls>-substitution|(textbf}\index{Befehls>-folge|(textbf}\index{Befehls>-block|(textbf}
\index{!|=\texttt{!|}|see{Pipe}}\index{Substitution|see{Befehls-Subst.}}
Es gibt eine Reihe verschiedener Möglichkeiten, Kommandos auszuführen:\nopagebreak
Es gibt eine Reihe verschiedener Möglichkeiten, Kommandos auszuführen. So
kommen Verkettungen, Abhängigkeiten und Gruppierungen zustande:\nopagebreak
\LTXtable{\textwidth}{tab_befehlsformen.tex}
\medskip\emph{Beispiele:}\nopagebreak