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<72>gt man
|
||||
<EFBFBD>ber einige bew<65>hrte Methoden zum Aufsp<73>ren von Fehlern:
|
||||
@ -86,6 +86,18 @@ Aufruf
|
||||
Zeile vor der Ausf<73>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<EFBFBD>ckgabewert, der Auskunft <20>ber Erfolg oder Mi<4D>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<EFBFBD>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<73>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<72>freien Blick auf unter Umst<73>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<64> mit dem folgenden Kommando daf<61>r gesorgt werden kann, da<64> der Inhalt
|
||||
einer Variablen nach jedem Kommando ausgegeben wird:
|
||||
|
||||
\lstinline|trap 'echo "Trace> \$var = \"$var\""' DEBUG|
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\index{Fehlersuche|)}\index{debuggen|)}
|
||||
|
||||
|
||||
\section{R<EFBFBD>ckgabewerte}\label{exitcode}\index{R<EFBFBD>ckgabewert|(textbf}\index{Exit-Code|see{R<EFBFBD>ckgabewert}}\index{Exit-Status|see{R<EFBFBD>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<EFBFBD>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<75>re Ausdr<64>cke (regular
|
||||
expression)\index{Regular Expression|see{Regul<EFBFBD>rer
|
||||
eingesetzt werden und den Meta-Zeichen, die in mehreren Programmen Verwendung
|
||||
finden, um z. B. Suchmuster zu definieren. Diese Muster werden auch regul<75>re
|
||||
Ausdr<EFBFBD>cke (regular expression)\index{Regular Expression|see{Regul<EFBFBD>rer
|
||||
Ausdruck}}\index{Expression|see{Regul<EFBFBD>rer
|
||||
Ausdruck}}\index{Ausdruck|see{Regul<EFBFBD>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<61>er den Status 0 zur<75>ckzugeben. Er wird benutzt, um Endlosschleifen\index{Endlosschleife} zu schreiben (siehe unter \ref{while}), oder um leere Bl<42>cke in \texttt{if}- oder \texttt{case}-Konstrukten\index{if=\texttt{if}}\index{case=\texttt{case}} m<>glich zu machen.
|
||||
|
||||
\medskip\emph{Beispiel:} Pr<50>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