summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans J. Koch <hjk@linutronix.de>2009-06-19 21:21:02 +0200
committerHans J. Koch <hjk@linutronix.de>2009-06-19 21:21:02 +0200
commit658ebb0590425e4d5a245292b30df4a58a7dbacb (patch)
treed67af8e0626e1de9bd11379f7cf28713e4a3ceb9
parent70f1e16d1f2994ef3c055fa914495f49f1b47700 (diff)
Added linux-basics/sh-programming
-rw-r--r--linux-basics/sh-programming/Makefile9
-rw-r--r--linux-basics/sh-programming/handout_sh-programming_de.tex17
-rw-r--r--linux-basics/sh-programming/pres_sh-programming_de.tex247
3 files changed, 259 insertions, 14 deletions
diff --git a/linux-basics/sh-programming/Makefile b/linux-basics/sh-programming/Makefile
new file mode 100644
index 0000000..325aad0
--- /dev/null
+++ b/linux-basics/sh-programming/Makefile
@@ -0,0 +1,9 @@
+all:
+ pdflatex pres_sh-programming_de.tex
+ pdflatex hints_sh-programming_de.tex
+ pdflatex handout_sh-programming_de.tex
+ pdflatex handout_sh-programming_de.tex
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/linux-basics/sh-programming/handout_sh-programming_de.tex b/linux-basics/sh-programming/handout_sh-programming_de.tex
index 4c391b2..5590e6e 100644
--- a/linux-basics/sh-programming/handout_sh-programming_de.tex
+++ b/linux-basics/sh-programming/handout_sh-programming_de.tex
@@ -1,17 +1,26 @@
-\documentclass{article}
+\documentclass{lxarticle}
\usepackage{german}
\usepackage[utf8]{inputenc}
+\usepackage{lxheaders}
+\usepackage{lxextras}
\begin{document}
-\section*{Titel}
+\section*{Einführung in die Shell-Programmierung}
-\subsection*{Abschnitt1}
+\subsection*{Aufbau von Shell-Skripten}
Text
-\subsection*{Abschnitt2}
+\subsection*{Variablen und Parameter}
Text
+\subsection*{Bedingte Verzweigungen}
+
+
+\subsection*{Schleifen}
+\subsection*{Einbinden anderer Skripte}
+\subsection*{Zugriff auf Dateien}
+
\end{document}
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}