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<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
|
||||
|
Reference in New Issue
Block a user