remove old presentation
authorratten <ratten@buecherratten.in-berlin.de>
Sun, 22 Dec 2024 19:11:55 +0000 (20:11 +0100)
committerratten <ratten@buecherratten.in-berlin.de>
Sun, 22 Dec 2024 19:11:55 +0000 (20:11 +0100)
my-way-to-shell.pdf [deleted file]
my-way-to-shell.tex [deleted file]
way-to-shell.pdf [new file with mode: 0644]
way-to-shell.tex [new file with mode: 0644]

diff --git a/my-way-to-shell.pdf b/my-way-to-shell.pdf
deleted file mode 100644 (file)
index 5f80d0a..0000000
Binary files a/my-way-to-shell.pdf and /dev/null differ
diff --git a/my-way-to-shell.tex b/my-way-to-shell.tex
deleted file mode 100644 (file)
index 28bc35b..0000000
+++ /dev/null
@@ -1,796 +0,0 @@
-\documentclass[xcolor,graphicx,parskip]{beamer}
-
-\usepackage[ngerman]{babel}
-\usepackage[utf8]{inputenc}
-%\usepackage{graphicx}
-\usepackage{tipa}
-
-\usetheme{Marburg}
-\usecolortheme{albatross}
-
-\setbeamertemplate{navigation symbols}{}
-\setbeamertemplate{footer}{\insertslidenumber}
-\setbeamertemplate{itemize items}[triangle] 
-
-\setbeamertemplate{page number in head/foot}[totalframenumber]
-
-\begin{document}
-
-\setbeamercolor{author}{fg=black}
-\setbeamercolor{institute}{fg=green}
-\setbeamercolor{date}{fg=black}
-\setbeamercolor{title}{fg=black}
-\setbeamercolor{subtitle}{fg=blue}
-
-\title[My Way to (S)HELL]{MY Way to (S)HELL}
-\subtitle{Einführung in die Programmierung mit bash}
-
-\author{Bücherratten}
-\institute{BeLUG}
-\date{05.02.2020}
-
-{
-\usebackgroundtemplate{\includegraphics[height=\paperheight]{/home/ratten/igitt/doku/Vortrag/bash-Vortrag/bash-on-fire.png}}
-
-\begin{frame}
-\maketitle
-\end{frame}
-
-\title{A Way to HELL}
-\subtitle{Einführung in die Programmierung mit bash}
-
-\author{Bücherratten}
-\institute{BeLUG}
-\date{05.02.2020}
-
-\begin{frame}
-\maketitle
-\end{frame}
-}
-
-\section{WhoAmI}
-\begin{frame}
-  \frametitle{WhoAmI}
-  \begin{itemize}
-  \item{35 Jahre}
-  \item{Linux Fan}
-    \begin{itemize}
-    \item{FSFE e.V}
-    \item{BeLUG e.V.}
-    \item{LinuxWorks!}
-    \end{itemize}
-  \item{Auszubildene Fachinformatikerin Bereich Systemintegration \\(1. Lehrjahr) im ITDZ Berlin}
-  \item{Hobby: Textadventure bash}
-  \item{Butterbrotdosen Smartphone}
-  \end{itemize} 
-\end{frame}
-
-\section{RTFM}
-\begin{frame}[shrink]
-  \frametitle{lese das Handbuch}
-  \framesubtitle{rtfm}
-  \smallbreak
-    \Huge{man man
-      \newline
-      \pause
-      \smallbreak
-      man bash
-      \newline
-      \pause
-      \smallbreak
-      info bash
-      \newline
-      \pause
-      \smallbreak
-    apropos}
-    \newline
-    \pause
-    \normalsize
-    \smallbreak
-    \textcolor{red}{Disklaimer: Dieser Vortrag hat keinen Anspruch auf Vollständigkeit! Sondern Spaß!}
-
-\end{frame}
-
-\section{Liste}
-
-\begin{frame}
-  \frametitle{Einkaufsliste}
-  \framesubtitle{Was wird gebraucht?}
-
-  \begin{itemize}
-  \item{aktuelles Linux}
-  \item{Terminal}
-    \pause
-    \item{Packages}
-    \begin{itemize}
-    \item{sl}
-    \item{ascii-quarium (komplizierter, weil kein fertiges Package für Debian-basierende Systeme)}
-    \item{cowsay}
-    \item{ponysay (auch als Debian-Paket verfügbar, aber noch nicht in den offiziellen Repros)}
-    \item{figlet}
-    \item{lolcat}
-    \item{which}
-    \item{expr}
-    \item{curl}
-    \item{date}
-    \item{ssh}
-    \item{cmatrix}
-    \item{script}
-    \item{fortune}
-    \end{itemize}
-  \end{itemize}    
-\end{frame}
-
-\section{Bash-Exkurse}
-\begin{frame}[shrink]
-  \frametitle{bash}
-  \framesubtitle{Unser Werkzeugkasten}
-  \large{kleiner Exkurs zur Bash}
-  \normalsize{
-  \begin{itemize}
-  \item{erster Release war 1989}
-  \item{name ist ein Akkronym für Bourne-Again Shell}
-  \item{ist der Ersatz für die Bourne Shell}
-  \item{Steht unter GPLv3 (bei macOS wurde deswegen auf zsh umgestellt)}
-    \pause
-  \item{es ist nicht die einzige Shell unter Unix-Systemen (es gibt sehr viel mehr), aber Default}
-  \item{Die Shell ist eine der Schnittstelle zwischen Benutzer und Betriebssystem}
-    \pause
-  \item{es gibt ziemlich viel Unterstützung für die einzelnen Befehle}
-  \item{sehr mächtig, (kann fast alles, bis auf kaffee kochen)}
-  \item{Erreichbarkeit: mit dem Shortcut: ALT STRG F1 oder ihr nutzt das pseudo-terminal eurer Wahl}
-     \pause
-   \item{was wir nicht machen können - aus Zeitlichen Gründen}
-     \begin{itemize}
-     \item{mit Farben spielen}
-     \item{RegularExpression}
-     \item{SubShells in der SubShell}
-     \end{itemize}
-  \end{itemize}}        
-\end{frame}
-
-\section{step by step}
-
-\begin{frame}
-  \frametitle{Wer brauch schon Erklärungen im Code?}
-  \framesubtitle{Kommentare}
-
-  \#Niemand hat die Absicht, Hash-Tags als Kommentar zu benutzen \\
-  \pause
-  \#Für Kommentare wird der ganze Latten-Zaun benutzt \\
-  \pause
-  \#Die Kommentare waren zu erst da!
-\end{frame}
-
-\section{Pipe}
-\begin{frame}[fragile]
-  \frametitle{Auf der Leitung stehen}
-  \framesubtitle{Was ist eine Pipe?}
-  \begin{itemize}
-  \item{Die Ausgabe eines Befehls an einen anderen weiter geben}
-    \pause
-  \item{\Huge{\textpipe}}
-  \end{itemize}
-  \pause
-\begin{verbatim}
-    fortune | cowsay | lolcat
-\end{verbatim}
-\pause
-Das geht beliebig oft
-\end{frame}
-
-\section{Kisten packen}
-
-\begin{frame}[fragile]
-  \frametitle{Das Kurz-Zeit-Gedächnis}
-  \framesubtitle{Kisten, für alles und nicht's}
-  \large{Was sind Variablen?}
-  \normalsize{
-  \begin{itemize}
-  \item{denk dir ein Wort oder Buchstaben aus, der kein Shell-Befehl ist}
-    \pause
-  \item{weise diesem Wort oder Buchstaben etwas zu}
-    \item{Wichtig dabei keine Leerzeichen um das Gleichheitszeichen!}
-    \pause
-    \item{Es muss kein Datentyp deklariert werden}
-  \end{itemize}
-  \pause
-\begin{verbatim}
-    var=10
-    Name=HeyDu
-    cmd=$(figlet -tf block Immer diese Menschen)
-\end{verbatim}
-  \pause
-  Das ganze wird mit
-\begin{verbatim}
-    $Variabelnname
-\end{verbatim}
-  benutzt.}
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{Das Kurz-Zeit-Gedächnis}
-  \framesubtitle{Kisten, für alles und nicht's}
-  
-  \large{Was sind Arrays?}\\
-  \normalsize{
-    eine Box für mehrere Werte, mit indexiertem Inhaltsverzeichnis
-    \pause
-\begin{verbatim}
-   declare -a wort
-   wort=(hier steht irgendwas drin)
-   echo $wort
-   #mit index
-   echo ${wort[2]}
-   #gesamtes Array
-   echo ${wort[*]}
-   echo ${wort[@]}
-\end{verbatim}
-    \pause
-    \small{
-      hint: Der Unterschied zwischen * und @ ist das newline beim @ (wird beim looping fliegen relevant)
-    }
-  }
-\end{frame}
-
-\section{Zwischen-Prüfung}
-
-\begin{frame}[fragile]
-  \frametitle{Das Leben besteht aus Prüfungen}
-  \framesubtitle{diese verdammt Logik und ihre Tests}
-  \large{Wofür macht man Tests?}
-  \pause
-  \normalsize{
-  \begin{itemize}
-  \item{ich will wissen, ob etwas richtig ist}
-  \item{ich will abhänig vom Wert einer Variable etwas tun}
-  \item{ich will etwas nicht tun wenn...}
-  \end{itemize}
-  \pause
-\begin{verbatim}
-    var=11
-    test $var == "10"
-    echo $?
-\end{verbatim}
-  \pause
-  \begin{description}
-  \item[var=11] setz die Variable var auf 11
-  \item[test \$var == ''10''] prüf mal ob in der Variable 10 steht
-  \item[echo \$?] was ist das ergebnis des letzten Befehls?
-  \item[\lbrack \rbrack] so kann der test-Befehl auch geschreiben werden
-  \end{description}
-  }
-\end{frame}
-
-\section{Logisch}
-
-\begin{frame}[fragile]
-  \frametitle{Das Leben besteht aus Prüfungen}
-  \framesubtitle{diese verdammt Logik und ihre Tests}
-  \large{Logik}
-  \pause
-  \normalsize{
-  \begin{description}
-  \item[UND] Prüfen, ob alles Tests wahr sind
-\begin{verbatim}
-      i="Du"
-      j="Hallo"
-      test $i == "Du" && \
-      test $j == "Hallo"
-      echo $?
-\end{verbatim}
-    \pause
-  \item[ODER] Prüfen, ob ein Test von mehreren wahr ist
-\begin{verbatim}
-      i="Name"
-      j="Hallo"
-      test $i == "1x" ||\
-      test $j == "Hallo"
-      echo $?
-\end{verbatim}
-    \pause
-  \item[nicht] Prüfen, ob ein Test falsch ist
-\begin{verbatim}
-     i="Falsch ist falsch"
-     test $i != "richtig"
-     echo $?
-\end{verbatim}
-  \end{description}
-  \pause
-  Das ganz kann belibig verknüpft werden - Also viel Spaß
-  }
-\end{frame}
-
-\section{Wenn...}
-\begin{frame}[fragile]
-  \frametitle{Wenn Du nicht sofort tust was ich sage, Dann ...}
-  \framesubtitle{Verzweigungen}
-  \large{if}\\
-  \normalsize{
-    Wenn, prüfe ob das wahr ist, dann...
-    \pause
-\begin{verbatim}
-      if test $var == "10"; then figlet "Das\
-      ist wahr"; fi
-
-      if [[ $var == "10" ]] ; then echo "Das\
-      ist echt wahr"; figlet "knapp vorbei \
-      ist auch daneben";fi
-\end{verbatim}
-    \pause
-    \begin{description}
-    \item[= vs ==] ist egal, solange darum leerzeichen verwendet werden
-      \pause
-    \item[else] muss nicht unbedingt verwendet werden
-      \pause
-    \item[mehrfach] verschachtelungen gehen auch
-    \end{description}
-    \large ifelse [[Bedingung]]
-  }
-\end{frame}
-
-\section{Wenn...}
-
-\begin{frame}[fragile]
-  \frametitle{Wenn Du nicht sofort tust was ich sage, Dann ...}
-  \framesubtitle{Verzweigungen}
-  Wenn die Verschachtelungen unübersichtlich werden:
-\begin{verbatim}
-     case $var in
-     10)
-     cowsay -f tux "ich hab 10 gefunden"
-     ;;
-     11)
-     cowsay -f tutle "ich hab 11 gefunden"
-     ;;
-     *)
-     cowsay -f ghostbusters "ich hab irgendwas\
-     gefunden"
-     ;;
-     esac
-\end{verbatim}  
-\end{frame}
-
-\section{Rechenmeister}
-
-\begin{frame}[fragile]
-  \frametitle{Mathe und bash}
-  \framesubtitle{Rechnen in der Shell}
-  einfach auf der shell loslegen ist zu einfach
-  \pause
-\begin{verbatim}
-x=$(expr $var * $var)
-\end{verbatim}
-Weise der Variable x das Ergebnis der Berechnung aus var mal var zu.
-\end{frame}  
-
-\section{Test}
-
-\begin{frame}
-  \frametitle{die Prüfung beginnt}
-  \framesubtitle{das erste Script}
-  ...and action in a shell
-  \pause
-  \begin{description}
-  \item[cut] zerschneide etwas (-d) am Zeichen (-f) speichere Feld
-  \item[echo] gib etwas aus (-e) erkenne Escape-Sequenzen
-  \item[date] gib das Datum aus (+\%) Format
-  \item[curl] zum holen der Webseite
-  \item[grep] etwas suchen (dieses etwas wird oft als Regular Expression beschreiben)
-  \end{description}
-\end{frame}
-
-
-\section{Loopings}
-
-\begin{frame}[fragile]
-  \frametitle{Schleifen binden und durch loopings fliegen}
-  \framesubtitle{while}
-
-  \large{solage etwas stimmt}\\
-  \normalsize{
-    mach etwas
-
-\begin{verbatim}
-  while [[ $var -eq "10" ]]
-  do
-    fortune       
-  done
-\end{verbatim}
-  }
-\end{frame}
-
-\begin{frame}[fragile]
-  \frametitle{Schleifen binden und durch loopings fliegen}
-  \framesubtitle{until}
-
-  \large{bis etwas stimmt}\\
-  \normalsize{
-    die Bedingung wird erst nach der ersten Runde in der Schliefe geprüft\\
-    mach etwas
-\begin{verbatim}
-   i=0
-
-   until [[ $i -eq 10 ]]
-   do
-      ((i++))
-      which brain?
-   done
-\end{verbatim}
-}
-\end{frame}
-
-
-\begin{frame}[fragile]
-  \frametitle{Schleifen binden und durch loopings fliegen}
-  \framesubtitle{for}
-
-  \large{bis etwas die Zahl \$n erreicht hat} \\
-  \normalsize{
-  mach etwas\\
-  wird häufig für Arrays benutzt\\
-  \pause
-  dafür sind Inkrement (hoch zählen um 1) ((i++))\\
-  und Dekrement (runter zählen um 1) ((i- -))\\
-  hilfreich.
-  \pause
-\begin{verbatim}
-  declare -a blubb
-
-  j=0
-  blubb=(aber nun reicht es mir)
-
-  for $i in ${blubb[@]}
-  do
-    ((j++))
-    echo $i $j
-  done
-\end{verbatim}
-  }
-\end{frame}
-
-\section{Wenn Programmierer diskutieren}
-\begin{frame}[fragile,shrink]
-  \frametitle{f(x)}
-  \framesubtitle{Funktionen}
-  \large{Teile und Herscher}
-  \newline
-  \normalsize{mit Funktionen können Code-Wiederholungen vermieden werden.\\
-    Aber auch der übersichtlichere Strukturen geschaffen werden die leichter lesbar sind.}
-  \pause
-  \scriptsize{
-\begin{verbatim}
-#/bin/bash
-datumsfrage()
-{
-  read -p "Welches Datum haben wir?" datVari
-  if [[ $datVari -eq date ]]
-  then
-    figlet "stimmt"
-  else
-    echo "nee, stimmt nicht - nochmal"
-    datumsfrage()
-  fi
-}
-
-echo "ich frag mal nach dem Datum"
-datumsfrage()
-\end{verbatim}
-  }
-\end{frame}
-
-
-\section{Oster-Spaß}
-\begin{frame}
-  \frametitle{die zweite Prüfung}
-  \framesubtitle{noch ein Script}
-   ...and action in a shell\\
-  \pause
-  \begin{description}
-  \item[sleep] bitte mal für \$n Sekunden einschlafen
-  \item[read] frag mal den User (-p) die Frage (Variabelnname) (-e) mit bash-complition
-  \item[RANDOM] für die Zufallsberechnung (\%) bis
-  \item[exit] breche hier mal und gib mir meine Shell zurück
-  \item[wc] zähl mal die wörter
-  \item[scriptreplay] spiel ein aufgenommens script ab
-  \end{description}
-\end{frame}
-  
-  
-\section{Rezepte erstellen}
-\begin{frame}[fragile]
-  \frametitle{Schreibe ein Rezept}
-  \framesubtitle{Not to Do}
-
-  \large{Befehle zusammenpacken}
-\normalsize{
-  \pause
-  \begin{itemize}
-  \item{Nimm den deinen lieblings-Texteditor}
-    \pause
-  \item{schreib deine Befehle in der Reihenfolge auf, in der sie ausgeführt werden sollen}
-    \pause
-  \item{Einrückungen von Code-Zeilen und das benutzen von Funktionen, erleichtern dir das zurecht finden im Code}
-    \pause
-  \item{speichere dein Werk unter einem Namen (auch ohne Datei-extention unter Linux ausführen)}
-    \pause
-  \item{teste so lange, bis es funktioniert (set +x oder -x)}
-    \pause
-  \item{ausführen und Spaß haben, automatisierte ausführung über cron, acron oder systemd-timer}
-  \end{itemize}
-
-  \pause
-\begin{verbatim}
-./name    #sourcen ! es müssen Aufführrechte 
-          #gesetzt sein
-bash name #bash führ das mal aus
-\end{verbatim}
-}
-\end{frame}
-
-
-\begin{frame}[fragile]
-  \frametitle{bang!bang!bang!}
-  \framesubtitle{Was macht das shebang?}
-  \large{Verrate der Shell welche Sprache du sprichst}
-  \newline
-  \normalsize{
-    \pause
-    \begin{itemize}
-    \item{Das shebang ist wichtig, wenn Irrtümer vermieden werden sollen}
-    \item{Das Script nicht unbedingt mit der Scriptsprache vorne weg gestartet wird}
-    \end{itemize}
-    \pause
-    Wie sieht das aus?
-\begin{verbatim}
-#!/bin/bash     
-\end{verbatim}
-Vorsicht! kann je nach Linux anders aussehen.
-  }
-\end{frame}
-
-\section{The End of Talk}
-
-\begin{frame}
-  \frametitle{Tipps und Tricks}
-  \begin{description}
-  \item[script] zeichnet auf, was in der shell passiert (inklusive der Typos)
-  \item[scriptreplay] spielt wieder ab, was ihr auf gezeichnet habt, wenn ihr vorher eine timing-datei angelegt habt, dann in Echtzeit
-  \item[bash -x] hilfreich fürs debugging von Scripten, weil es anzeigt, wie die Variabeln aufgelöst werden
-  \item[Passwörter und Passphrases] haben in scripten nicht's verloren
-  \end{description}
-  
-  \pause
-  Bitte vergesst nicht Fehler einzubauen, das hat den Größten Lerneffekt  
-\end{frame}
-
-
-\begin{frame}
-  \frametitle{Ende}
-  \large{Vielen Dank fürs zuhören! \\ Habt ihr noch Fragen?}\hfill \break
-  \normalsize{
-    \colorbox{blue}{\textcolor{white}{Susanne (Bücherratten)}} \\
-    \colorbox{blue}{\textcolor{white}{ratten@buecherratten.in-berlin.de}} \\
-    \colorbox{blue}{\textcolor{white}{friendica:buecherratte@snarl.de}} \\
-    \colorbox{blue}{\textcolor{white}{gpg:fingerprint:}} \\
-    \colorbox{blue}{\textcolor{white}{0E42 3FA3 838E E7ED 5AA2}} \\
-    \colorbox{blue}{\textcolor{white}{20E7 ACA3 EA4A C038 CCFD}} \\
-  }
-\end{frame}
-
-%% #!/bin/bash
-
-%% #Answer to the question:
-%% # When is Congress?
-
-%% Tage=0
-
-%% Datum=$(date +%d-%m)
-%% #Datum=
-%% gruen="\e[32m"
-%% blau="\e[34m"
-%% rot="\033[1;31m" 
-%% nc="\033[0m"
-
-%% Tag=$(echo $Datum | cut -d'-' -f1)
-%% Monat=$(echo $Datum |cut -d'-' -f2)
-
-
-
-%% if [[ $Monat == 12 ]]
-%%    then
-
-%%        if [[ $Tag > 26 && $Tag < 30 ]]
-%%        then
-%%        echo "It's congress time"
-%%        echo -e $blau "visit congress or one of the Congress-Everywhere-stations"$nc
-%%        fi
-       
-%%        if [[ $Tag -lt 26 ]]
-%%        then
-%%        Tage=$(expr 26 - $Tag)
-%%        echo -e $gruen "Es sind noch " $Tage " zum Congress, be prepaired"$nc 
-%%        elif [[ $Tag == 31 ]]
-%%        then
-%%        echo -e $rot "Congress is over :-( \n wish you a happy new Year" $nc
-%%        fi
-
-%%        if [[ $Tag == 24 ]]
-%%        then
-%%        echo "It's Chrissmess-Time"
-%%        fi
-       
-%% fi
-
-%% case $Monat in
-
-%%     11)
-%%     Tage=$(expr 30 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     10)
-%%     Tage=$(expr 61 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     9)
-%%     Tage=$(expr 91 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     8)
-%%     Tage=$(expr 122 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     7)
-%%     Tage=$(expr 153 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     6)
-%%     Tage=$(expr 183 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     5)
-%%     Tage=$(expr 214 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     4)
-%%     Tage=$(expr 244 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     3)
-%%     Tage=$(expr 275 - $Tag + 26)
-%%     echo "Es sind noch " $Tage " zum Congress"
-%%     ;;
-%%     2)
-%%     Schaltjahr=$(date --date='31 Dec' +%j)
-%%     if [[ $Schaltjahr == 366 ]]
-%%     then
-%%         Tage=$(expr 304 - $Tag + 26)
-%%         echo "Es sind noch " $Tage " zum Congress"
-%%     else
-%%         Tage=$(expr 303 - $Tag + 26)
-%%         echo "Es sind noch " $Tage " zum Congress"
-%%     fi
-%%     ;;
-%%     1)
-%%     Schaltjahr=$(date --date='31 Dec' +%j)
-%%     if [[ $Schaltjahr == 366 ]]
-%%     then
-%%         Tage=$(expr 335 - $Tag + 26)
-%%         echo "Es sind noch " $Tage " zum Congress"
-%%     else
-%%         Tage=$(expr 334 - $Tag + 26)
-%%         echo "Es sind noch " $Tage " zum Congress"
-%%     fi
-%%     ;;
-       
-%% esac
-
-%% #!/bin/bash
-
-%% # Der Adventskalender für die Shell
-
-%% #array deklaration
-%% declare -a xmessup
-
-%% cccTime()
-%% {
-%%     xmessup=($ls congress/*)
-    
-%%     while [[ $Tage != 0 ]]
-%%     do
-%%     figlet -t waiting for Congress   
-%%     echo "Es sind noch " $Tage " bis zum Congress"
-%%     fortune
-%%     zahl=$(expr $day / 2)
-%%     if [[ $zahl < 2 ]]
-%%     then
-%%         zahl=1
-%%     fi              
-%%     feh ${xmessup[$zahl]}
-%%     break
-%%     done
-
-%%     if [[ $Tage == 0 ]]
-%%     then
-%%     figlet -t "It's congress time"
-%%     echo "make sure to have your ticket available or use the Congress-Everywhere-Stations of Congress"
-
-%%     for i in $xmessup
-%%     do
-%%         feh $i
-%%         sleep 5
-%%     done
-       
-%%     sleep 5
-%%     figlet -tf block "Be exelent to each other"
-%%     asciiquarium
-%%     exit
-%%    fi
-%% }
-
-%% xmess()
-%% {
-%%     xmessup=($ls xmessup/*)
-%%     figlet -tf block Advent Advent
-%%     if [[ $Tage != 0 ]]
-%%     then
-%%     random=$((RANDOM%17))
-%%     if [[ random == 0 ]]
-%%     then
-%%         fortune
-%%     else
-%%         zahl=$(expr $day / 2)
-%%         if [[ $zahl < 2 ]]
-%%         then
-%%             zahl=1
-%%         fi  
-%%     feh ${xmessup[$zahl]}
-%%     fi   
-%%     cowsay -f tux "Have a nice Xmess-Time"
-%%     exit
-%%     else
-%%     figlet -tf block marry chrismess
-%%     echo "hier is a shell-present for you:"
-%%     ascciquarium
-%%     exit
-%%     fi    
-%% }
-
-
-%% choose()
-%% {
-%%     read -p "Soll der Adventskalender bis Weihnachten (w) oder bis zum Congress (c) gehen? " Endpunkt
-    
-%%     if [[ $Endpunkt == "w" ]]
-%%     then
-%%     Tage=$(expr 24 - $day)
-%%     xmess      
-%%     elif [[ $Endpunkt == "c" ]]
-%%     then
-%%     Tage=$(expr 26 - $day)
-%%     cccTime
-%%     else
-%%     echo "Sorry, I dont understand your answer, please use >>w<< or >>c<< to answer"
-%%     choose
-%%     fi
-%% }
-
-%% main()
-%% {
-%%     month=$(date +%m)
-%%     day=$(date +%d)
-%%     if [[ $month == 12 && $day < 27 ]]
-%%     then
-%%     choose
-%%     else
-%%     echo "This is only working in December and until 26th of December"
-%%     exit
-%%    fi    
-%% }
-
-%% main
-
-
-
-
-\end{document}
diff --git a/way-to-shell.pdf b/way-to-shell.pdf
new file mode 100644 (file)
index 0000000..ed41dbc
Binary files /dev/null and b/way-to-shell.pdf differ
diff --git a/way-to-shell.tex b/way-to-shell.tex
new file mode 100644 (file)
index 0000000..033e7d5
--- /dev/null
@@ -0,0 +1,791 @@
+\documentclass[graphicx,aspectratio=169]{beamer}
+
+\usepackage[usenames, dvipsnames]{xcolor}
+\usepackage[ngerman]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{tipa}%für die pipe
+
+\usepackage{textpos}
+\usepackage{pgfpages} %für notizen in Slides
+
+\usepackage{tcolorbox}%runde colorboxen \usepackage{textpos}
+
+\usepackage{stmaryrd} % \shortrightarrow
+
+\usepackage[final]{qrcode}%für qrcodes
+\usepackage{hyperref}
+%\usepackage{showkeys}
+
+\uselanguage{German}
+\languagepath{German}
+
+\definecolor{kuerzung}{RGB}{254, 198, 1}
+\definecolor{orange}{RGB}{234, 155, 23}
+\definecolor{dunkelblau}{RGB}{11, 12, 93}
+\definecolor{gruen}{RGB}{137, 252, 0}
+\definecolor{gruendunkel}{RGB}{172, 210, 237}
+\definecolor{titelblau}{RGB}{21, 59, 80}
+\definecolor{blau}{rgb}{0.7, 0.99, 0.99}
+\definecolor{coolblack}{rgb}{0.0, 0.18, 0.39}
+\definecolor{DarkGreen}{rgb}{0.0, 0.6, 0.0}
+\definecolor{ao}{rgb}{0.12, 0.3, 0.17}
+\definecolor{realRFC}{rgb}{0.1, 0.1, 0.44}
+\definecolor{witzRFC}{rgb}{0.01, 0.75, 0.24}
+\definecolor{prefix}{rgb}{0.5, 0.5, 0.0}
+\definecolor{IID}{rgb}{0.56, 0.0, 1.0}
+\definecolor{CIDR}{rgb}{0.0, 0.29, 0.29}
+
+\mode<handout>{%
+  
+  \setbeameroption{show notes}
+  %\setbeamerfont{note page}{size=\large}
+  %\setbeameroption{show notes on second screen=bottom}
+  \setbeamertemplate{note page}{%
+    \vspace{1cm}
+    weitere Informationen:\\
+    \vskip.25em
+    \nointerlineskip
+        {\Huge \insertframetitle}
+        \vskip.25em
+              {\Large\insertframesubtitle}
+              \vskip.25em
+              %\vspace{1cm}\\              
+              \insertnote}
+}
+
+\mode<beamer>{%
+  \setbeamerfont{note page}{size=\Large}
+  \setbeameroption{show notes on second screen=bottom}
+  \setbeamertemplate{note page}{%
+    \begin{columns}
+      \begin{column}{0.2\textwidth}
+        \insertslideintonotes{0.25}
+      \end{column}
+      \begin{column}{0.7\textwidth}
+        \begin{center}
+          Speaker Notes:\\
+          \insertframetitle \break
+          \insertframesubtitle
+          \end{center}
+    \end{column}
+    \end{columns}
+    \vspace{-0.6cm}
+           {\Huge\insertnote}
+  }
+}
+
+\usetheme[hideothersubsections,left]{Goettingen}
+
+\graphicspath{{Bilder/}}
+
+% minted Optionen                                                                                                                                                                                                                              
+\usepackage{lineno}
+\usepackage[newfloat]{minted}
+\usemintedstyle{friendly}
+\usemintedstyle[sourcelist,linux-config]{autumn}
+\usemintedstyle[console]{staroffice}
+\usemintedstyle[bash]{pastie}
+
+\setminted[bash]{
+  breaklines=true,
+  tabsize=2,
+  linenos,
+  numbersep=2pt,
+  autogobble,
+  framesep=0pt
+}
+
+\setminted[linux-config]{
+  breaklines=true,
+  linenos,
+  numbersep=2pt,
+  autogobble,
+  framesep=0pt
+    }
+
+\setminted[console]{
+  breaklines=true,
+  linenos,
+  numbersep=2pt,
+  autogobble,
+  framesep=0pt
+  }
+
+\setbeamercovered{transparent}
+\useoutertheme{sidebar}
+\useinnertheme{rounded}
+
+%um descripten links auszurichten
+
+\defbeamertemplate{description item}{align left}{\insertdescriptionitem\hfill}
+\setbeamertemplate{description item}[align left]
+
+%Beispiel Farb Definition
+\setbeamercolor{block title example}{use=example text,fg=example text.fg,bg=example text.fg!20!bg}
+\setbeamercolor{block body example}{parent=normal text,use=block title example,bg=block title example.bg!50!bg}
+
+%DefintionsBlock Farbspezification
+
+\setbeamercolor{block title}{use=structure text,fg=blue,bg=example text.fg!20!bg}
+\setbeamercolor{block body}{parent=normal text,use=block title example,bg=block title example.bg!50!bg}
+
+\setbeamertemplate{frametitle}[default][center]
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{page number in head/foot}[totalframenumber]
+
+% fußzeilen Definition
+
+\setbeamertemplate{footline}{\vspace*{-20pt} \leavevmode%
+  \hbox{%
+    \hspace{2cm} \colorbox{white}{\color{black}
+      \insertdate \hspace{1.5cm}  \insertshortauthor \hspace{6cm} \insertframenumber  }}}
+
+\setbeamertemplate{itemize items}[triangle]
+\setbeamertemplate{page number in foot}[totalframenumber]
+
+% sidebarsetting
+\setbeamertemplate{sidebar canvas left}[vertical shading][top=ao,middle=titelblau,bottom=DarkGreen]
+\setbeamercolor{section in sidebar shaded}{fg=yellow}
+\setbeamercolor{author in sidebar}{fg=ao}
+\setbeamercolor{title in sidebar}{fg=white}
+
+% Sidebar Farben normal
+
+\setbeamercolor{section in sidebar shaded}{fg=blau}
+\setbeamercolor{subsection in sidebar shaded}{fg=Yellow}
+\setbeamercolor{subsubsection in sidebar shaded}{fg=SpringGreen}
+
+%Sidebar Farben aktiviert
+
+\setbeamercolor*{palette sidebar primary}{fg=YellowOrange}
+\setbeamercolor*{palette sidebar secondary}{fg=YellowOrange}
+
+\setbeamercolor{titlelike}{fg=white, bg=titelblau}
+
+%  %itemsetting
+
+\setbeamercolor{item}{fg=blue}%color of bullet
+\setbeamercolor{subitem}{fg=orange}%color of bullet
+
+%inhaltsverzeichniss                                                                                                  
+\setbeamercolor{section in toc}{fg=blue}%, bg=black}
+
+\setbeamercolor{subsection in toc}{fg=DarkGreen}
+\setbeamercolor{subsubsection in toc}{fg=teal}
+\setbeamertemplate{sections/subsections in toc}[triangle]
+
+%\setbeamertemplate{blocks}[rounded]
+
+\setbeamertemplate{title page}[default][colsep=-4bp,rounded=true]
+
+\begin{document}
+
+\title[A Way to (S)HELL]{\textbf{A Way to HELL}}
+\subtitle{\textbf{ein Einstieg in die Programmierung mit bash}}
+
+\author{Susanne Schütze}
+\institute{38c3 Haecksen}
+\date{30.12.2024}
+
+%Background
+
+\setbeamercolor{background canvas}{bg=white}
+\setbeamertemplate{background}{%
+  \includegraphics[height=\paperheight,width=\paperwidth]{bash-on-fire.png}}
+
+%sitebar leer setzten                                                                                                                                                                                                                          
+\setbeamertemplate{sidebar left}{}
+
+%notepage with itemize                                                                                                                                                                                                                         
+\makeatletter
+\def\beamer@setupnote{%
+  \gdef\beamer@notesactions{%
+    \beamer@outsideframenote{%
+      \beamer@atbeginnote%
+      \beamer@notes%
+      \ifx\beamer@noteitems\@empty\else
+      \begin{itemize}\itemsep=0pt\parskip=0pt%
+        \beamer@noteitems%
+      \end{itemize}%
+      \fi%
+      \beamer@atendnote%
+    }%
+    \gdef\beamer@notesactions{}%
+  }
+}
+\makeatother
+
+%titlepage ohne sidebar                                                                                                                                                                                                                        
+\makeatletter
+\begin{frame}[plain]
+  \hspace*{-\beamer@sidebarwidth}%                                                                                                                                                                                                             
+  \advance\textwidth by \beamer@sidebarwidth\relax
+  \beamer@sidebarwidth=\z@
+  \begin{minipage}{\textwidth}
+    \maketitle
+  \end{minipage}
+\end{frame}
+
+\makeatother
+\setbeamertemplate{background}
+
+\begin{frame}[shrink]
+  \frametitle{Inhalt}
+  \textbf{\tableofcontents[hideothersubsections]}
+  \vspace{0.4cm}
+\end{frame}
+
+%sidebar wiederherstellen                                                                                                                                                                                                                      
+\setbeamertemplate{sidebar left}[sidebar theme]
+
+\subsection{whoami}
+\begin{frame}
+  \frametitle{whoami}
+  \begin{itemize}
+  \item{Susanne}
+  \item{40 Jahre}
+  \item{Pronomen: sie}
+  \item{Berufsbezeichnung: Fachinformatikerin für Systemintegration}
+  \item{Berufliches Themenfeld: Linux Client Management}
+  \item{Linuxerin seit Kernel 2.6.24 (2009)}
+  \item{Zugehörigkeiten zu: Haecksen, BeLUG, FSFE}
+  \end{itemize}
+   URL zu Folien und Handout:
+  \vspace{0.2cm}
+  \begin{columns}
+    \only<beamer>{\begin{column}{0.2\textwidth}
+      \qrcode[hyperlink,height=1.5cm]{http://git.tuxteam.de/gitweb/?p=susannes-git/A_Way_to_Shell.git;a=tree;h=refs/heads/main;hb=refs/heads/main}
+    \end{column}}
+    \begin{column}{0.8\textwidth}
+      \url{http://http://git.tuxteam.de/gitweb/?p=susannes-git/A_Way_to_Shell.git;a=tree;h=refs/heads/main;hb=refs/heads/main}
+    \end{column}
+    \end{columns}
+\end{frame}
+
+\section{Liste}
+\begin{frame}
+  \frametitle{Einkaufsliste}
+  \framesubtitle{Was wird gebraucht?}
+
+  \begin{itemize}
+  \item{aktuelles Linux (je nach Distro gibt es andere Eastereggs ;-))}
+  \item{Terminal (bash)}
+    \pause
+    \item{Packages:}
+    \begin{itemize}
+    \item{sl}    
+    \item{cowsay}
+    \item{figlet}
+    \item{fortune-mod}
+    \end{itemize}
+  \end{itemize}
+\end{frame}
+
+\section{How to Skript}
+
+\subsection{Rezepte erstellen}
+\begin{frame}[fragile]
+  \frametitle{Schreibe ein Rezept}
+  \framesubtitle{Skripte schreiben}
+  \large{Befehle zusammenpacken}
+  \normalsize{
+    \begin{itemize}
+    \item{Den lieblings-Texteditor (vim, emacs, nano, geany, gedit, kate, Leafpad, Mousepad...) benutzten}
+    \item{Befehle in der Reihenfolge aufschreiben, in der sie ausgeführt werden sollen}
+      \note[item]{bash arbeitet von oben nach unten, alle Befehle ab}
+    \item{beim Speichern Dateiextension (.sh) nicht notwendig}
+    \item{ausführen und Spaß haben}
+    \end{itemize}
+    \pause
+    \begin{minted}{bash}
+      ./name #sourcen erfordert Ausführungsrechte
+      bash name #bash mach mal name
+    \end{minted}
+  }
+\end{frame}
+
+\subsection{Zeilen im Skript}
+\begin{frame}[fragile]
+  \frametitle{alles in einer Zeile}
+  \framesubtitle{Beispiel}
+  \begin{minted}{bash}
+Zahl= ;Wort= ;i=; for ((i=1 ; i<=15 ; i++)); do Zahl=$((RANDOM%134+1));Wort="$(sed -n "$Zahl p" liste.txt)";echo $Wort;echo $Wort >> dat.txt;done;echo -e '\n \n \t' " Viel Glück beim merken";sleep 2m;clear;echo -e '\n' "Mach mal 10 min was anderes!";sleep 10m;echo -e '\n \a' "Es geht jetzt los" '\n';Ergeb= ;r=0;f=0; echo "Schreibe die gemerkten Worte in der richtigen Reihenfolge auf"; for i in `seq 1 15`;do read Ergeb$i;if [ "$(eval echo \$Ergeb$i)" = "$(sed -n "$i p" dat.txt)" ] ; then echo -e "Richtig!" '\n'; ((r++)); else echo -e "Falsch!" '\n'; ((f++)); fi; done; echo "Die richitgen Wörter waren:";cat dat.txt;echo "Du hast " $r " Wörter richtig! und " $f " Wörter falsch";rm dat.txt
+  \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Eingerückt}
+  \framesubtitle{Beispiel}
+  \begin{columns}[T]
+    \begin{column}{0.5\textwidth}
+  \begin{minted}[fontsize=\footnotesize,breakanywhere]{bash}
+    #!/bin/bash
+    Z=  ; E=
+    W=  ; r=0
+    i=  ; f=0
+    for ((i=1 ; i<=15 ; i++))
+    do
+       Z=$((RANDOM%134+1))
+       W="$(sed -n "$Z p" liste.txt)"
+       echo $W
+       echo $W >> dat.txt
+    done
+    echo -e '\n \n \t' " Viel Glück beim merken"
+    sleep 2m
+    clear
+    echo -e '\n' "10 min Warten!"
+    sleep 10m
+  \end{minted}
+    \end{column}
+     \begin{column}{0.5\textwidth}
+       \begin{minted}[fontsize=\footnotesize,breakanywhere]{bash}
+    echo -e '\n \a' "Es geht jetzt los"
+    echo "Schreibe die Wörter auf:"
+    for i in `seq 1 15`
+    do
+       read E$i
+       if [ "$(eval echo \$E$i)" = "$(sed -n "$i p" dat.txt)" ]
+       then echo -e "Richtig!" '\n'
+          ((r++))
+        else echo -e "Falsch!" '\n'
+           ((f++))
+        fi
+    done
+    echo "Die richtigen Wörter waren:"
+    cat dat.txt
+    echo "Du hast $r richtig! und $f falsch"
+    rm dat.txt
+  \end{minted}
+     \end{column}
+  \end{columns}
+  \vspace{0.5cm}
+\end{frame}
+
+\subsection{sprechende Namen im Skript}
+\begin{frame}[fragile]
+  \frametitle{sprechende Namen im Skript}
+  \framesubtitle{Beispiel}
+  \begin{minted}[fontsize=\footnotesize,breakanywhere]{bash}
+    #!/bin/bash
+    Zahl=
+    Wort=
+    i=
+    for ((i=1 ; i<=15 ; i++))
+    do
+        Zahl=$((RANDOM%134+1))
+        Wort="$(sed -n "$Zahl p" liste.txt)"
+        echo $Wort
+        echo $Wort >> dat.txt
+    done
+    echo -e '\n \n \t' " Viel Glück beim merken"
+    sleep 2m
+    clear
+    echo -e '\n' "Mach mal 10 min was anderes!"
+    sleep 10m
+    \end{minted}
+\end{frame}
+
+\subsection{Kommentare}
+
+\begin{frame}
+  \frametitle{Wer braucht schon Erklährungen im Code}
+  \framesubtitle{Kommentare}
+  \# Niemand hat die Absicht, Hash-Tags als Kommentar zu benutzen\\
+  Der Code dokumentiert sich stets von selbst\\
+  \pause
+  \#Für Kommentare wird der ganze Latten-Zaun benutzt\\
+  \pause
+  \#Die Kommentare waren zuerst da!
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{mit Kommentare}
+  \framesubtitle{Beispiel}
+  \begin{minted}[fontsize=\footnotesize,breakanywhere]{bash}
+    #!/bin/bash                                                                                                                                                                                                                                   # Variablen Deklaration                                                                                                                                                                                                                       Zahl=
+    Wort=
+    i=
+    #For schleife zum durchzählen                                                                                                                                                                                                             
+    for   ((i=1 ; i<=15 ; i++))
+    do
+    #Zufallszahl ausgeben                                                                                                                                                                                                                         #echo $RANDOM                                                                                                                                                                                                                             
+    #Da der Zufall größer ist als die Textdatei wird Der Bereich gekürzt                                                                                                                                                                      
+    #echo $(($RANDOM %100))                                                                                                                                                                                                                       #jetzt wäre der Bereich nur bis 99 groß, das muss erweiter werden                                                                                                                                                                                     Zahl=$((RANDOM%134+1))
+    #Die Zufallszahl wird in der Variabel Zahl gespeichert                                                                                                                                                                                        #Nun soll die Zeile mit der entspechenden Nummer ausgegeben werden                                                                                                                                                                                   Wort="$(sed -n "$Zahl p" liste.txt)"
+           echo $Wort
+           echo $Wort >> dat.txt
+           #Schreibt das Wort zusätzlich in eine Datei                                                                                                                                                                                                   
+        #Jetzt noch ne Schleife drumrumbauen                                                                                                                                                                                                      done
+
+    echo -e '\n \n \t' " Viel Glück beim merken"
+    sleep 2m
+    \end{minted}
+\end{frame}
+
+\subsection{Pipes}
+\begin{frame}[fragile]
+  \frametitle{Auf der Leitung stehen}
+  \framesubtitle{Was ist eine Pipe?}
+  \begin{itemize}
+  \item{Die Ausgabe eines Befehls an einen anderen weitergeben}
+  \item{\Huge{\textpipe}}
+  \end{itemize}
+  \bigskip
+  \begin{minted}{bash}
+    fortune | cowsay
+  \end{minted}
+  Das geht beliebig oft
+\end{frame}
+
+\subsection{Konvertionen}
+\begin{frame}[fragile]
+  \frametitle{Typographische Konvertionen}
+  \framesubtitle{How-to}
+  Sind nirgendwo eindeutig festgeschrieben. Folgende werden häufig eingesetzt:
+  \begin{itemize}
+  \item{sprechende Namen für Funktionen und Variablen verwenden}
+  \item{Quotes hilfreich wenn Variablen leerzeichen enthalten geschweifte Klammern nur für bestimmte Situationen erforderlich}
+    \mintinline{bash}{"${variable}"}
+  \item{test wird häufig als [ ] oder [[ ]], geschrieben, wobei letzteres sauberer ist, für die bash}
+  \item{Variablen kleingeschreiben um mit Umgebungsvariabeln und OS-Variablen nicht ins gehege zu kommen}
+  \item{= vs == meistens wird == verwendet wie in anderen Programmiersprachen}
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{bang!bang!bang!}
+  \framesubtitle{Was macht das shebang?}
+  \begin{itemize}  
+  \item{die Skript-Sprache verraten}
+    \pause
+  \item{Das Shebang ist wichtig, wenn Irrtümer vermieden werden sollen}
+  \item{Das Skript nicht unbedingt mit der Scriptsprache vorne weg gestartet wird.}
+  \item{Das Skript aus einer anderen Shell csh,fish,zsh aufgerufen wird}
+  \end{itemize}
+  \pause
+  \begin{minted}{bash}
+    #!/bin/bash
+  \end{minted}
+  \pause
+  Vorsicht! der Pfad kann je nach Linux anders sein: \mintinline{bash}{whereis bash}
+\end{frame}
+
+\subsection{Debugging}
+\begin{frame}[fragile]
+  \frametitle{Debugging}
+  \framesubtitle{How-to}
+  \begin{itemize}
+  \item{beenden im Fehlerfall \mintinline{bash}{set -o errexit} oder \mintinline{bash}{set -e}}
+  \item{prüft ungesetze Variablen funktioniert nicht mit Umgebungsvariabeln \mintinline{bash}{set -o nounset} oder \mintinline{bash}{set -u}}
+  \item{schreibt mit was gerade ausgeführt wird, dabei werden Variablen aufgelöst \mintinline{bash}{ set -o xtrace} oder \mintinline{bash}{set -x}}
+  \item{fancy Debugger muss nachinstalliert werden \mintinline{bash}{shellcheck}}
+  \end{itemize}
+\end{frame}
+
+\subsection{hilfe}
+\begin{frame}
+  \frametitle{lese das Handbuch}
+  \framesubtitle{rtfm}
+  \Huge{man man\\
+    \pause
+    man bash\\
+    \pause
+    info bash\\
+    \pause
+    apropos / whatis}      
+\end{frame}
+
+\section{Variablen}
+\begin{frame}[fragile]
+  \frametitle{Was ist in der Tasse?}
+  \framesubtitle{Variablen}
+  \begin{itemize}
+  \item{denk dir ein Wort oder Buchstaben aus}
+  \item{weise diesem Wort oder Buchstaben etwas zu}
+  \item{keine Gedanken um Datentypen machen}
+  \end{itemize}
+  \pause
+  Variablen Zuweisung:
+  \begin{minted}{bash}
+    Tasse=10
+    B1-Tasse=Pinguin
+    command=$(fortune)
+  \end{minted}
+  Benutzung:
+  \begin{minted}{bash}
+    echo $Tasse
+    echo $B1-Tasse
+    echo $command
+  \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Variablen}
+  \framesubtitle{schlechte Ideen}
+  Was besser nicht gemacht wird:
+  \begin{itemize}
+    \item{einem bash-Befehl als Variable benutzen}
+    \begin{minted}{bash}
+      apt=moo
+    \end{minted}
+    \begin{minted}{console}
+      apt=moo
+      echo $apt
+      moo
+    \end{minted}
+  \item{Leerzeichen um das Gleichheitszeichen}
+    \begin{minted}{bash}
+      Tasse = lecker
+    \end{minted}
+    \begin{minted}{console}
+      Tasse = lecker
+      command Tasse not found
+    \end{minted}
+    \end{itemize}
+\end{frame}
+
+\section{Code verteilen}
+\begin{frame}[fragile,shrink]
+  \frametitle{f(x)}
+  \framesubtitle{Funktionen}
+  Teile und Herrsche
+  \newline
+  Funktionen können:\\
+  \begin{itemize}
+  \item{Code-Wiederholungen vermeiden}
+  \item{übersichtlichere Strukturen schaffen}
+  \item{die Lesbar erleichtern}
+  \end{itemize}
+  \pause
+    \begin{minted}{bash} 
+      #/bin/bash
+      datumsfrage()
+      {
+        cowsay -f dragon "Haben wir heute den $(date) ?"
+      }
+      datumsfrage
+    \end{minted}
+\end{frame}
+
+\section{Kommunikationsskills}
+\begin{frame}[fragile]
+  \frametitle{Kommunikation mit Usern}
+  \framesubtitle{Ein-/Ausgabe}
+  Wenn Text im Terminal ausgegeben werden soll, wird \mintinline{bash}{echo} als Befehl verwendet:
+  \begin{minted}{bash}
+    echo "Was macht ein Pirat am Computer?"
+    echo "Enter drücken"
+  \end{minted}
+  \pause
+  Wenn wir den Nutzer unseres Programms etwas eingeben lassen wollen, können wir \mintinline{bash}{read} verwenden:
+  \begin{minted}{bash}
+    echo "Was macht ein Pirat am Computer?"
+    read Antwort
+    echo "Enter drücken"
+    echo "deine Antwort war $Antwort"
+  \end{minted}
+\end{frame}
+
+\section{Logik}
+\begin{frame}[fragile]
+  \frametitle{Wie funktioniert die Logik?}
+  \framesubtitle{testen, testen, testen}
+  Warum testen? 
+  \begin{itemize}
+  \item{ich will wissen, ob etwas richtig ist}
+  \item{ich will abhänig vom Wert einer Variable etwas tun}
+  \item{ich will etwas nicht tun wenn \dots}
+  \end{itemize}
+  \pause
+  \begin{minted}{bash}
+    read -p "Was packst du in die Tasse? " Tasse
+    test $Tasse = "Mate"
+    echo $?
+    # andere Schreibweise:
+    [ $Tasse = "Mate" ]
+    echo $?
+    # oder:
+    [[ $Tasse = "Mate" ]]
+  \end{minted}  
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Wie funktioniert die Logik}
+  \framesubtitle{Logische Verknüpfungen}
+  \begin{description}
+  \item[UND] Prüfen, ob alle Tests wahr sind
+    \begin{minted}{bash}
+   i="Du"   
+   Tasse="Kaffee"
+   test $i = "Du" && [ $Tasse = "Kaffee" ]
+   echo $?
+    \end{minted}
+    \pause
+  \item[ODER] Prüfen, ob ein Test von mehreren wahr ist
+    \begin{minted}{bash}
+      B1_Tasse="Tee"
+      Tasse="Kaffee"
+      test $B1_Tasse = "1x" || [ $Tasse = "Kaffee" ]
+      echo $?
+    \end{minted}
+    \pause
+  \item[nicht] Prüfen, ob ein Test falsch ist
+    \begin{minted}{bash}
+ Tasse="Tee"
+ test $Tasse != "Kaffee"
+ echo $?
+    \end{minted}
+  \end{description}
+  \pause
+  Das ganz kann beliebig verknüpft werden - Also viel Spaß
+\end{frame}
+
+\section{Wenn...}
+\begin{frame}[fragile]
+  \frametitle{Wenn Du nicht sofort tust was ich sage, Dann ...}
+  \framesubtitle{Verzweigungen}
+  if\\
+  Wenn, prüfe ob das wahr ist, dann...
+  \begin{minted}{bash}
+if test "$Tasse" = "Kaffee"; then echo "lecker"; fi
+if [[ $Tasse == "Tee" ]] ; then echo "lecker" ; else cowsay "Ostfriese";fi
+if [[ -z $Tasse ]] ; then echo "Tasse leer"; elif test $Tasse = "Kaffee" ; then cowsay "lecker $Tasse " ; else cowsay "So'n Tee";fi
+  \end{minted}
+  \pause
+  \begin{description}
+  \item[else] muss nicht unbdeingt verwendet werden
+    \pause
+  \item[elif Bedingung] mehrfach Ververkettungen
+    \pause
+  \item[-z] Die Länge der ZEICHENKETTE ist Null
+    \pause
+  \item[ = vs == ] egal, solange Leerzeichen verwendet werden
+  \end{description}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Boxen}
+  \framesubtitle{Wenn Variablen nicht ausreichen}
+  Was sind Arrays?\\
+  eine Box für mehrere Werte
+  \begin{minted}{bash}
+    Box=(1 pinguin 3 4)
+    echo $Box
+    #mit index
+    echo ${Box[2]}
+    #gesamtes Array
+    echo ${Box[*]}
+    echo ${Box[@]}
+  \end{minted}
+  \small{hint: * und @ unterscheiden sich.\\ @ hat Newline zwischen den Index-Werten (wird beim looping fliegen relevant).}
+\end{frame}
+
+\section{Loopings}
+
+\begin{frame}[fragile]
+  \frametitle{Schleifen binden und durch loopings fliegen}
+  \framesubtitle{while}
+  \textcolor{red}{solange} etwas stimmt, mach etwas!
+  \begin{minted}{bash}
+Tasse="5"
+while [[ $Tasse -gt 3 ]]
+do
+fortune
+((Tasse--))
+echo "es sind $Tasse Murmeln in der Tasse"
+done
+  \end{minted}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Schleifen binden und durch loopings fliegen}
+  \framesubtitle{until}
+  \textcolor{red}{bis} etwas stimmt, mach etwas!
+  \begin{minted}{bash}
+Tasse="7"
+until [[ $Tasse -lt 5 ]]
+do
+((Tasse--))
+apropos brain?
+echo "es sind $Tasse Murmeln in der Tasse"
+done
+  \end{minted}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Schleifen binden und durch loopings fliegen}
+  \framesubtitle{for}
+  \textcolor{red}{bis etwas die Zahl n} erreicht hat, mach etwas!\\
+  Wird häufig für Arrays benutzt\\
+ \begin{minted}{bash}
+j=0
+blubb=(einmal Mate bitte)
+for $i in ${blubb[@]}
+do
+((j++))
+echo "An Stelle $j steht " $i
+done
+\end{minted}
+  \begin{description}
+  \item[Inkrement] erhöhe um 1 ((i++))
+  \item[Dekrement] verringere um 1) ((i-\,-))
+  \end{description}
+ \end{frame}
+
+\section{Rechen-Meister}
+\begin{frame}[fragile]
+  \frametitle{Mathe und bash}
+  \framesubtitle{Rechnen in der Shell}
+  \dots geht, aber \dots\\
+   \begin{itemize}
+   \item{\mintinline{bash}{expr 2 \* 4}}
+   \item{\mintinline{bash}{let x=2*4 ; echo $x}}
+   \item{\mintinline{bash}{ echo "2*4" | bc } bitte das Packet bc installieren}
+   \end{itemize}    
+\end{frame}
+
+\begin{frame}
+  \frametitle{Tipps und Tricks}
+  \begin{description}
+  \item[script] zeichnet auf, was in der Shell passiert (inklusive der Typos)
+  \item[scriptreplay] spielt wieder ab, was ihr aufgezeichnet habt, mit timing-Datei sogar in Echtzeit
+  \item[Passwörter und Passphrases] haben in Scripten nichts verloren
+  \item[root-Rechte ins Skripten erlangen] lasst es sein
+  \end{description}
+  \pause
+  Bitte vergesst nicht, Fehler einzubauen, das hat den Größten Lerneffekt  
+\end{frame}
+
+\section{The End of Talk}
+\begin{frame}
+  \frametitle{Ende}
+  \large{Vielen Dank fürs zuhören! \\ Habt ihr noch Fragen?}
+
+\end{frame}
+
+\appendix
+
+\section{Im Fall von...}
+\begin{frame}[fragile]
+  \frametitle{Im Fall vom, tue ...}
+  \framesubtitle{Verschachtelungen}
+  Wenn if für die Verschachtelungen unübersichtlich werden:
+  \begin{minted}{bash}
+case $Tasse in
+Kaffee)
+cowsay -f tux "Lecker Kaffee"
+;;
+Tee)
+cowsay -f turtle "Lecker Tee"
+;;
+*)
+cowsay -f ghostbusters "hmm Irgendwas"
+;;
+esac
+  \end{minted}
+  \pause
+  lässt sich nur im Skript benutzen, nicht in der Kommandozeile
+\end{frame}
+
+\end{document}