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<65>hrt um eben durch die Angabe von \lstinline|#!/bin/sh|
die Bourne-Shell f<>r die Ausf<73>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<65>hrt um eben
durch die Angabe von \lstinline|#!/bin/sh| die Bourne-Shell f<>r die Ausf<73>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<64>cke auswerten
kann\footnote{\texttt{if} und Konsorten pr<70>fen nur den
Urspr<EFBFBD>nglich konnte die Standard-Shell keine arithmetischen oder logischen
Ausdr<EFBFBD>cke auswerten\footnote{\texttt{if} und Konsorten pr<70>fen nur den
R<EFBFBD>ckgabewert\index{R<EFBFBD>ckgabewert} eines aufgerufenen Programmes~--~0 bedeutet
`true', alles andere bedeutet `false', siehe auch \ref{exitcode}.}, mu<6D> dazu
ein externes Programm benutzt werden. Dieses Programm hei<65>t
\verb\test\\index{test=\texttt{test}}. <20>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<EFBFBD>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. <20>. lesbarer zu machen.
`true', alles andere bedeutet `false', siehe auch \ref{exitcode}.}. F<>r diese
Aufgabe mu<6D>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<65>ren
Dateitests und Vergleiche von Zeichenfolgen oder ganzen Zahlen. Diese
Bedingungen k<>nnen auch durch Verkn<6B>pfungen kombiniert werden.
Dieser Befehl hei<65>t \verb\test\\index{test=\texttt{test}}. <20>blicherweise
steht er auf allen Systemen auch noch unter dem Namen \verb\[\ zur Verf<72>gung.
Diese Variante ist fast absolut gleichwertig zu benutzen (in dieser Form wird
allerdings eine abschlie<69>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.
<EFBFBD>. lesbarer zu machen.
\verb\test\ bietet sehr umfangreiche Optionen an. Dazu geh<65>ren Dateitests und
Vergleiche von Zeichenfolgen oder ganzen Zahlen. Diese Bedingungen k<>nnen auch
durch Verkn<6B>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 <20>berfl<66>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<75>hren:\nopagebreak
Es gibt eine Reihe verschiedener M<>glichkeiten, Kommandos auszuf<75>hren. So
kommen Verkettungen, Abh<62>ngigkeiten und Gruppierungen zustande:\nopagebreak
\LTXtable{\textwidth}{tab_befehlsformen.tex}
\medskip\emph{Beispiele:}\nopagebreak