From 658ebb0590425e4d5a245292b30df4a58a7dbacb Mon Sep 17 00:00:00 2001
From: "Hans J. Koch" <hjk@linutronix.de>
Date: Fri, 19 Jun 2009 21:21:02 +0200
Subject: Added linux-basics/sh-programming

---
 .../sh-programming/pres_sh-programming_de.tex      | 247 ++++++++++++++++++++-
 1 file changed, 237 insertions(+), 10 deletions(-)

(limited to 'linux-basics/sh-programming/pres_sh-programming_de.tex')

diff --git a/linux-basics/sh-programming/pres_sh-programming_de.tex b/linux-basics/sh-programming/pres_sh-programming_de.tex
index 07db328..dbecb3d 100644
--- a/linux-basics/sh-programming/pres_sh-programming_de.tex
+++ b/linux-basics/sh-programming/pres_sh-programming_de.tex
@@ -1,24 +1,251 @@
-\documentclass{article}
+\documentclass{beamer}
+\usetheme{linutronix}
 \usepackage{german}
 \usepackage[utf8]{inputenc}
+\usepackage{pgf}
+\usepackage{graphicx}
+\usepackage{lxextras}
+
+\title{Einführung in die Shell-Programmierung}
+\institute{Linutronix GmbH}
 
 \begin{document}
 
-\section*{Block \lq Was ist Linux?\rq}
+\maketitle
 
-\subsection*{Lernziele}
+% ----- Slide ------------------
+\begin{frame}
+\frametitle{Aufbau von Shell-Skripten}
 \begin{itemize}
-\item Lernziel 1
-\item Lernziel 2
-\item Lernziel 3
+\item Syntax: \cmd{\#!/ein/interpreter}
+\pause
+\item Beliebiges Programm als Interpreter möglich
+\pause
+\item Beispiele hier: \cmd{\#!/bin/sh}
+\pause
+\item Danach beliebige Shell-Befehle möglich
 \end{itemize}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Hello World als Shell-Script}
+\begin{lstlisting}
+#!/bin/sh
+echo Hello World
+\end{lstlisting}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Variablen und Parameter}
+\begin{lstlisting}
+#!/bin/sh
+
+MY_VAR=17
+PAR_1=$1
+datum=`date`
+
+echo variable is $(MYVAR), parameter is $(PAR_1)
+\end{lstlisting}
+
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{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}
+
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Bedingte Verzweigungen}
+\begin{lstlisting}
+#!/bin/sh
+
+if [ bedingung ]
+  then
+    ...
+  else
+    ...
+fi
+
+# in one line:
+
+if [ bedingung ] ; then ... ; fi
+
+\end{lstlisting}
+
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Bedingte Verzweigungen}
+\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}
+
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Bedingte Verzweigungen}
+\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}
+
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Bedingte Verzweigungen}
+\begin{lstlisting}
+#!/bin/sh
+
+# Does addr.txt contain "Jones" ?
+if grep Jones addr.txt ; then ...
+
+# Return value 0 means OK
+exit 0
+
+\end{lstlisting}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Bedingte Verzweigungen}
+\begin{lstlisting}
+#!/bin/sh
+
+# Short circuit tests:
+
+make && make install
+
+grep Jones addr.txt || echo "No Jones found!"
+
+\end{lstlisting}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Schleifen}
+\begin{lstlisting}
+#!/bin/sh
+
+for datei in datei1 datei2 datei3
+do
+    cp $datei $datei.bak
+done
+
+for datei in *
+do
+    ...
+done
+
+\end{lstlisting}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Schleifen}
+\begin{lstlisting}
+#!/bin/sh
+
+while [ bedingung ]
+do
+    ...
+done
+
+while [ bedingung ] ; do ... ; done
+
+# bedingung wie bei if
+
+\end{lstlisting}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Funktionen}
+\begin{lstlisting}
+#!/bin/sh
+
+error_log() {
+  echo "Fehler: $1" >> my_log_file
+}
+
+...
+
+error_log "Datei nicht gefunden."
+
+\end{lstlisting}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{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}
+\end{frame}
+
+% ----- Slide ------------------
+\begin{frame}[fragile]
+\frametitle{Zugriff auf Dateien}
+\begin{lstlisting}
+#!/bin/sh
 
-\subsection*{Unterrichts-Ablauf}
+ls -1 > dateiliste.txt
 
-Hinweise zur Präsentation, Zeitplanung, etc.
+while read dateiname
+do
+    if [ -d $dateiname ]
+    then
+      echo "$dateiname ist ein Verzeichnis"
+    fi
+done < dateiliste.txt
 
-\subsection*{Übungen bei vorhandener Hardware}
+\end{lstlisting}
+\end{frame}
 
-Hinweise zu Übungen, Zeitlimit dazu.
 
 \end{document}
-- 
cgit v1.2.3

