summaryrefslogtreecommitdiff
path: root/linux-basics
diff options
context:
space:
mode:
Diffstat (limited to 'linux-basics')
-rw-r--r--linux-basics/sh-programming/handout_sh-programming_de.tex190
1 files changed, 188 insertions, 2 deletions
diff --git a/linux-basics/sh-programming/handout_sh-programming_de.tex b/linux-basics/sh-programming/handout_sh-programming_de.tex
index 5590e6e..f27f70e 100644
--- a/linux-basics/sh-programming/handout_sh-programming_de.tex
+++ b/linux-basics/sh-programming/handout_sh-programming_de.tex
@@ -10,17 +10,203 @@
\subsection*{Aufbau von Shell-Skripten}
-Text
+\begin{itemize}
+\item Syntax: \cmd{\#!/ein/interpreter}
+\item Beliebiges Programm als Interpreter möglich
+\item Beispiele hier: \cmd{\#!/bin/sh}
+\item Danach beliebige Shell-Befehle möglich
+\end{itemize}
+
+Das übliche \cmd{Hello World} sieht als Shell-Skript etwa so aus:
+
+\begin{lstlisting}
+#!/bin/sh
+echo Hello World
+\end{lstlisting}
\subsection*{Variablen und Parameter}
-Text
+\begin{lstlisting}
+#!/bin/sh
+
+MY_VAR=17
+PAR_1=$1
+datum=`date`
+
+echo variable is $(MYVAR), parameter is $(PAR_1)
+\end{lstlisting}
+
+Variablen können einfach in der Form \cmd{Name=Wert} geschrieben werden. Sie
+haben in Shell-Skripten keinen Typ und werden bei der ersten Verwendung
+automatisch angelegt.
+
+\subsection*{Ausgabe-Umleitung}
+
+\begin{lstlisting}
+#!/bin/sh
+
+# How many lines in addr.txt contain "Jones" ?
+# Store the result in "jones_count"
+grep Jones addr.txt | wc -l > jones_count
+
+# Append a message to a log file
+echo "My message" >> log_file
+
+exit 0
+\end{lstlisting}
+
\subsection*{Bedingte Verzweigungen}
+Allgemeine Form:
+
+\begin{lstlisting}
+#!/bin/sh
+
+if [ bedingung ]
+ then
+ ...
+ else
+ ...
+fi
+
+# in one line:
+
+if [ bedingung ] ; then ... ; fi
+\end{lstlisting}
+
+Zahlentests:
+
+\begin{lstlisting}
+#!/bin/sh
+
+# Zahlentests: -eq -ne -lt -gt -le -ge
+zahl=15
+if [ $zahl -lt 20 ] ; then ...
+
+# String-Tests: = != < > -n -z
+string="Hallo"
+if [ $string != "hello" ] ; then ...
+\end{lstlisting}
+
+Dateitests:
+
+\begin{lstlisting}
+#!/bin/sh
+# Dateitests, z.B. if [ -f $datei ] ; then ...
+# Auswahl:
+# -f ist eine normale Datei
+# -d ist ein Verzeichnis
+# -e existiert
+# -s existiert und ist nicht leer
+# -r ist lesbar
+# -w ist schreibbar
+# -x ist ausfuehrbar
+# -b ist ein Block Device
+# -c ist ein Character Device
+\end{lstlisting}
+
+Test des Rückgabewerts von Programmen:
+
+\begin{lstlisting}
+#!/bin/sh
+
+# Does addr.txt contain "Jones" ?
+if grep Jones addr.txt ; then ...
+
+# Return value 0 means OK
+exit 0
+
+\end{lstlisting}
+
+Short circuit tests:
+
+\begin{lstlisting}
+#!/bin/sh
+
+# Short circuit tests:
+
+make && make install
+
+grep Jones addr.txt || echo "No Jones found!"
+\end{lstlisting}
+
\subsection*{Schleifen}
+
+For-Schleife:
+
+\begin{lstlisting}
+#!/bin/sh
+
+for datei in datei1 datei2 datei3
+do
+ cp $datei $datei.bak
+done
+
+for datei in *
+do
+ ...
+done
+\end{lstlisting}
+
+While-Schleife:
+
+\begin{lstlisting}
+#!/bin/sh
+
+while [ bedingung ]
+do
+ ...
+done
+
+while [ bedingung ] ; do ... ; done
+
+# bedingung wie bei if
+\end{lstlisting}
+
+\subsection*{Funktionen}
+
+\begin{lstlisting}
+#!/bin/sh
+
+error_log() {
+ echo "Fehler: $1" >> my_log_file
+}
+
+...
+
+error_log "Datei nicht gefunden."
+\end{lstlisting}
+
\subsection*{Einbinden anderer Skripte}
+
+\begin{lstlisting}
+#!/bin/sh
+
+# Include an external script:
+. my_other_script
+
+# run another script/command in the background:
+my_other_script&
+
+\end{lstlisting}
+
\subsection*{Zugriff auf Dateien}
+\begin{lstlisting}
+#!/bin/sh
+
+ls -1 > dateiliste.txt
+
+while read dateiname
+do
+ if [ -d $dateiname ]
+ then
+ echo "$dateiname ist ein Verzeichnis"
+ fi
+done < dateiliste.txt
+
+\end{lstlisting}
+
\end{document}