Viele Aenderungen
This commit is contained in:
@@ -54,7 +54,7 @@ da
|
||||
kann man an der Shell durch Eingabe von \lstinline/echo $PATH/\index{\$PATH=\texttt{\$PATH}} herausfinden.
|
||||
|
||||
|
||||
\section{Fehlersuche}
|
||||
\section{Fehlersuche}\label{fehlersuche}\index{Fehlersuche|(}\index{debuggen|(}
|
||||
|
||||
Es gibt für Shell-Skripte keine wirklichen Debugger, aber trotzdem verfügt man
|
||||
über einige bewährte Methoden zum Aufspüren von Fehlern:
|
||||
@@ -86,6 +86,18 @@ Aufruf
|
||||
Zeile vor der Ausführung aus, allerdings im Gegensatz zu \texttt{-x} nicht in
|
||||
der expandierten sondern in der vollen Form.
|
||||
|
||||
\item \texttt{set -e}: Alle gängigen Shell-Kommandos liefern einen
|
||||
Rückgabewert, der Auskunft über Erfolg oder Mißerfolg gibt (siehe Abschnitt
|
||||
\ref{exitcode}). Normalerweise liegt es beim Programmierer, diese Werte zu
|
||||
interpretieren. Setzt man aber mit dem Schalter \texttt{-e} den sogenannten
|
||||
errexit-Modus, beendet die Shell das Skript sobald ein Kommando sich mit einem
|
||||
Rückgabewert ungleich 0 beendet.
|
||||
|
||||
Ausnahmen gibt es lediglich, wenn das betroffene Kommando in ein Konstrukt
|
||||
wie \texttt{while}, \texttt{until} oder \texttt{if} eingebunden ist. Auch wenn
|
||||
der Rückgabewert mittels \texttt{\&\&} oder \texttt{||} verarbeitet wird,
|
||||
beendet sich die Shell nicht.
|
||||
|
||||
\item System-Log: Für das direkte Debuggen ist dieser Weg weniger geeignet,
|
||||
aber gerade in unbeobachtet laufenden Skripten sollte man unerwartete Zustände
|
||||
oder besondere Ereignisse im System-Log festhalten. Dies geschieht mit dem
|
||||
@@ -98,12 +110,22 @@ eine l
|
||||
Ruhe analysiert werden. Das Kommando wird in Abschnitt \ref{script}
|
||||
beschrieben.
|
||||
|
||||
TODO: Debuggen
|
||||
%http://localhost/~rschaten/doku/abs-guide/debugging.html#FTN.AEN14050
|
||||
%-> trapping signals
|
||||
\item \texttt{tee}: Wenn Ausgaben eines Kommandos durch den Filter \texttt{tee}
|
||||
geschoben werden, können sie in einer Datei mitgeschrieben werden. Auch diese
|
||||
Variante bietet einen streßfreien Blick auf unter Umständen sehr lange und
|
||||
komplexe Ausgaben. Abschnitt \ref{tee} gibt weitere Hinweise zu dem Kommando.
|
||||
|
||||
\item Variablen `tracen': Das Kommando \texttt{trap} (Abschnitt \ref{trap})
|
||||
reagiert auf Signale. Die Shell erzeugt nach jedem Kommando das Signal DEBUG,
|
||||
so daß mit dem folgenden Kommando dafür gesorgt werden kann, daß der Inhalt
|
||||
einer Variablen nach jedem Kommando ausgegeben wird:
|
||||
|
||||
\lstinline|trap 'echo "Trace> \$var = \"$var\""' DEBUG|
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\index{Fehlersuche|)}\index{debuggen|)}
|
||||
|
||||
|
||||
\section{Rückgabewerte}\label{exitcode}\index{Rückgabewert|(textbf}\index{Exit-Code|see{Rückgabewert}}\index{Exit-Status|see{Rückgabewert}}
|
||||
|
||||
@@ -286,11 +308,16 @@ Die folgenden Zeichen k
|
||||
\index{Quoting|)}
|
||||
|
||||
|
||||
\section{Meta-Zeichen}\index{Meta-Zeichen|(textbf}\index{Wildcards|see{Metazeichen}}\index{Joker-Zeichen|see{Metazeichen}}\index{Platzhalter|see{Metazeichen}}\label{metazeichen}
|
||||
\section{Meta-Zeichen}\index{Meta-Zeichen|(textbf}\index{Wildcards|see{Metazeichen}}\index{Joker-Zeichen|see{Metazeichen}}\index{Platzhalter|see{Metazeichen}}\index{Globbing|see{Metazeichen}}\label{metazeichen}
|
||||
\index{*=\texttt{*}|(textbf}\index{?=\texttt{?}|(textbf}\index{[abc]=\texttt{[}\textsl{abc}\texttt{]}|(textbf}\index{[a-q]=\texttt{[}\textsl{a}\texttt{-}\textsl{q}\texttt{]}|(textbf}\index{[!!abc]=\texttt{[!!}\textsl{abc}\texttt{]}|(textbf}\index{Dateinamen|(textbf}
|
||||
\index{\~{}=\texttt{\~{}}|(textbf}\index{\~{}name=\texttt{\~{}}\textsl{name}|(textbf}\index{\~{}+=\texttt{\~{}+}|(textbf}\index{\~{}-=\texttt{\~{}-}|(textbf}
|
||||
|
||||
Bei der Angabe von Dateinamen können eine Reihe von Meta-Zeichen\footnote{Meta-Zeichen werden auch Wildcards, Joker-Zeichen oder Platzhalter genannt.} verwendet werden, um mehrere Dateien gleichzeitig anzusprechen oder um nicht den vollen Dateinamen ausschreiben zu müssen.
|
||||
Bei der Angabe von Dateinamen können eine Reihe von
|
||||
Meta-Zeichen\footnote{Meta-Zeichen werden auch Wildcards, Joker-Zeichen oder
|
||||
Platzhalter genannt. Meint man die Expansion der Meta-Zeichen zu Dateinamen ist
|
||||
auch von `Globbing' die Rede.} verwendet werden, um mehrere Dateien
|
||||
gleichzeitig anzusprechen oder um nicht den vollen Dateinamen ausschreiben zu
|
||||
müssen.
|
||||
|
||||
Die wichtigsten Meta-Zeichen sind:\nopagebreak
|
||||
\LTXtable{\textwidth}{tab_metazeichen.tex}
|
||||
@@ -317,10 +344,9 @@ das Suchmuster \texttt{.*}.
|
||||
|
||||
Man unterscheidet in der Shell-Programmierung zwischen den
|
||||
Meta-Zeichen\index{Meta-Zeichen}, die bei der Bezeichnung von Dateinamen
|
||||
eingesetzt werden (sogenanntes `Globbing'\index{Globbing}) und den
|
||||
Meta-Zeichen, die in mehreren Programmen Verwendung finden, um z. B. Suchmuster
|
||||
zu definieren. Diese Muster werden auch reguläre Ausdrücke (regular
|
||||
expression)\index{Regular Expression|see{Regulärer
|
||||
eingesetzt werden und den Meta-Zeichen, die in mehreren Programmen Verwendung
|
||||
finden, um z. B. Suchmuster zu definieren. Diese Muster werden auch reguläre
|
||||
Ausdrücke (regular expression)\index{Regular Expression|see{Regulärer
|
||||
Ausdruck}}\index{Expression|see{Regulärer
|
||||
Ausdruck}}\index{Ausdruck|see{Regulärer Ausdruck}} genannt. Sie bieten
|
||||
wesentlich mehr Möglichkeiten als die relativ einfachen Wildcards für
|
||||
@@ -491,9 +517,14 @@ der Bourne-Shell wirkt das f
|
||||
|
||||
Dieser Befehl tut nichts, außer den Status 0 zurückzugeben. Er wird benutzt, um Endlosschleifen\index{Endlosschleife} zu schreiben (siehe unter \ref{while}), oder um leere Blöcke in \texttt{if}- oder \texttt{case}-Konstrukten\index{if=\texttt{if}}\index{case=\texttt{case}} möglich zu machen.
|
||||
|
||||
\medskip\emph{Beispiel:} Prüfen, ob jemand angemeldet ist:\nopagebreak
|
||||
\LTXtable{\textwidth}{tab_beisp_nullbefehl.tex}
|
||||
\index{Null-Befehl|)}
|
||||
\begin{lstlisting}
|
||||
if who | grep $1 > /dev/null; then # who: Liste der Benutzer
|
||||
# grep: Suche nach Muster
|
||||
: # tut nichts
|
||||
else
|
||||
echo "Benutzer $1 ist nicht angemeldet"
|
||||
fi
|
||||
\end{lstlisting}
|
||||
|
||||
|
||||
\subsection{Source (\texttt{.})}\label{source}\index{source=\texttt{source}|(textbf}\index{.=\texttt{.}|see{source}}
|
||||
|
||||
Reference in New Issue
Block a user