Kleine Verbesserungen, neue Kommandos exec und type.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user