\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} \maketitle % ----- Slide ------------------ \begin{frame} \frametitle{Aufbau von Shell-Skripten} \begin{itemize} \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} echo date is $datum echo hostname of this machine is $(hostname) echo \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 ls -1 > dateiliste.txt while read dateiname do if [ -d $dateiname ] then echo "$dateiname ist ein Verzeichnis" fi done < dateiliste.txt \end{lstlisting} \end{frame} \end{document}