%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Kopfzeile
\ihead{Linux}
\chead{}
\ohead{http://kohnlehome.de/linux/bash-programmierung.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
bash-Skriptprogrammierung
\end{center}


\section{Angabe der Shell}
\begin{tabular}{l l}
\texttt{\#!/bin/bash} & muss ganz links in der ersten Zeile stehen
\end{tabular}

\section{Kommentare}
\begin{tabular}{l l}
\texttt{\# Kommentar} & alles, was hinter einem \texttt{\#} steht, wird ignoriert
\end{tabular}

\section{Variablen}
\subsection{Wertzuweisung}
\begin{tabular}{l l}
\texttt{VARIABLE='Irgendein Text'} & Zuweisung von Text\\
\texttt{VARIABLE=42} & Zuweisung einer ganzen Zahl\\
\texttt{VARIABLE=\$( KOMMANDO )} & Ausgabe des Kommandos in Variable speichern\\
\texttt{read VARIABLE} & Benutzereingabe von Konsole lesen
\end{tabular}
\subsection{Inhalt lesen}
\begin{tabular}{l l}
\texttt{\$VARIABLE} oder \texttt{\$\{VARIABLE\}} & Inhalt der Variablen lesen
\end{tabular}

\section{Rechnen mit ganzen Zahlen}
\subsection{Terme mit \texttt{\$((  ))}}
\paragraph{Beispiele}
\begin{tabular}{r l r}
\texttt{SUMME=\$(( ZAHL1 + ZAHL2 ))} & oder & \texttt{SUMME=\$(( \$ZAHL1 + \$ZAHL2 ))}
\end{tabular}
\paragraph{Rechenoperatoren}
\texttt{+ - * / \% **} (Potenz)

\subsection{Anweisungen mit \texttt{((  ))}}
\paragraph{Beispiel}
\texttt{(( x = x + 3 ))} 
\paragraph{Rechen- und Zuweisungsoperatoren}
\texttt{+ - * / \% ** = += -= *= /= \%= ++ --}

\section{Skript beenden}
\begin{tabular}{l l}
\texttt{exit 0} & kein Fehler aufgetreten\\
\texttt{exit 1} & Fehler aufgetreten\\
\end{tabular}

\section{Rückgabewert des letzten Kommandos}
\texttt{\$?} oder \texttt{\$\{?\}}


\section{Parameter}
\begin{tabular}{l l}
\texttt{\$\#} oder \texttt{\$\{\#\}} & Anzahl der übergebenen Argumente\\
\texttt{\$0} oder \texttt{\$\{0\}} & Dateiname des Skripts\\
\texttt{\$1} oder \texttt{\$\{1\}} & 1.Parameter\\
\texttt{...} & \\
\texttt{\$9} oder \texttt{\$\{9\}} & 9.Parameter\\
\texttt{\$*} oder \texttt{\$\{*\}} & alle übergebenen Parameter\\
\end{tabular}

\section{Bedingungen}
0 = true, 1 = false

\subsection{Zeichenketten}
\begin{tabular}{l l}
\texttt{[ \$TEXT ]} & TEXT nicht leer\\
\texttt{[ -z \$TEXT ]} & TEXT leer\\
\texttt{[ \$TEXT1 = \$TEXT2 ]} & TEXT1 und TEXT2 identisch\\
\texttt{[ \$TEXT1 != \$TEXT2 ]} & TEXT1 und TEXT2 nicht identisch\\
\\
\end{tabular}




\subsection{Dateien und Verzeichnisse}
\begin{tabular}{l l}
\texttt{[ -e \$PFAD ]} & Datei existiert\\
\texttt{[ -f \$PFAD ]} & ist normale Datei\\
\texttt{[ -d \$PFAD ]} & ist Verzeichnis\\
\texttt{[ -r \$PFAD ]} & ist lesbar\\
\texttt{[ -w \$PFAD ]} & ist schreibbar\\
\texttt{[ -x \$PFAD ]} & ist ausführbar\\
\texttt{[ \$PFAD1 -nt \$PFAD2 ]} & Datei1 ist neuer als Datei2
\end{tabular}

\subsection{Zahlen}
\begin{tabular}{l l}
\texttt{[ \$ZAHL1 -eq \$ZAHL2 ]} & $==$\\
\texttt{[ \$ZAHL1 -ne \$ZAHL2 ]} & $!=$\\
\texttt{[ \$ZAHL1 -gt \$ZAHL2 ]} & $>$\\
\texttt{[ \$ZAHL1 -ge \$ZAHL2 ]} & $>=$\\
\texttt{[ \$ZAHL1 -lt \$ZAHL2 ]} & $<$\\
\texttt{[ \$ZAHL1 -le \$ZAHL2 ]} & $<=$
\end{tabular}


\subsection{Verknüpfung von Bedingungen}
\begin{tabular}{l l}
\texttt{[ Bedingung1 ] || [ Bedingung2 ]} & ODER\\
\texttt{[ Bedingung1 ] \&\& [ Bedingung2 ]} & UND\\
\texttt{! [ Bedingung ]} & NICHT
\end{tabular}

\section{Verzweigungen}
\begin{tabular}{l l}
\begin{minipage}{8cm}
\subsection{if}
\begin{verbatim}
if [ Bedingung1 ]; then
     Kommandos1
elif [ Bedingung2 ]; then
     Kommandos2
else
     Kommandos2
fi




\end{verbatim}
\end{minipage}
&
\begin{minipage}{6cm}
\subsection{case}
\begin{verbatim}
case $VARIABLE in
     Wert1)
          Kommandos1
          ;;
     Wert2)
          Kommandos2
          ;;
     *)
          Kommandos3
          ;;
esac     
\end{verbatim}
\end{minipage}
\end{tabular}


\newpage
\section{Schleifen}
\subsection{for}
\begin{verbatim}
for VARIABLE in Wert1 Wert2 Wert3; do
     Kommandos
done 
\end{verbatim}

\subsection{for}
\begin{verbatim}
for(( i=0; i<5; i++)); do
     Kommandos
done 
\end{verbatim}

\subsection{while}
\begin{verbatim}
while [ Bedingung ]; do
     Kommandos
done 
\end{verbatim}

\subsection{until}
\begin{verbatim}
until [ Bedingung ]; do
     Kommandos
done 
\end{verbatim}

\section{Arrays}
\subsection{Wertzuweisung}
\begin{verbatim}
name[0]=Franz
name[1]=Kohnle
\end{verbatim}
\subsection{Inhalt lesen}
\begin{verbatim}
${name[1]}    
\end{verbatim}


\section{Funktionen}
\subsection{Definition (vor dem Aufruf)}
\begin{verbatim}
funktionsname(){
    Kommando1
    Kommando2 $1 $2 # Parameter
}
\end{verbatim}

\subsection{ Aufruf}
\begin{verbatim}
funktionsname argument1 argument2
\end{verbatim}
\end{document}
