From 658ebb0590425e4d5a245292b30df4a58a7dbacb Mon Sep 17 00:00:00 2001 From: "Hans J. Koch" Date: Fri, 19 Jun 2009 21:21:02 +0200 Subject: Added linux-basics/sh-programming --- linux-basics/sh-programming/Makefile | 9 + .../sh-programming/handout_sh-programming_de.tex | 17 +- .../sh-programming/pres_sh-programming_de.tex | 247 ++++++++++++++++++++- 3 files changed, 259 insertions(+), 14 deletions(-) create mode 100644 linux-basics/sh-programming/Makefile (limited to 'linux-basics') 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} -- cgit v1.2.3