# Bash Skripting

# Benutzereingabe

```bash
#!/bin/bash

# Root oder nicht root?
if [[ $UID -ne 0 ]]
then 
  echo "Das Skript läuft nicht mit Root-Rechten" 
fi

# Den Login-Namen abfragen
read -p 'Bitte den Login-Namen eingeben: ' USERNAME

# Den vollständigen Namen abfragen
read -p 'Bitte den vollständigen Namen eingeben: ' COMMENT

# Das Passwort abfragen
read -p 'Bitte Das Paswort eingeben: ' PASSWORD

# Den Benutzer anlegen
useradd -m -c "$COMMENT" -s /bin/zsh $USERNAME

# Das Passwort setzen 
echo "$SUERNAME:$PASSWORD | chpasswd # chpasswd muss verwendet werden, da passwd nicht über ein skript funktioniert
```

## Usereingabe über Parameter

```bash
#!/bin/bash

# Root oder nicht root?
if [[ $UID -ne 0 ]]
then 
  echo "Das Skript läuft nicht mit Root-Rechten" 
  exit 1
fi

# Drei Parameter? 
if [[ $# -ne 3 ]];then
  echo "Syntax: Adding-user-parm.sh USERNAME \"REAL NAME\" PASSWORD" 
  exit 1 
fi

USERNAME="$1"
COMMENT="$2"
PASSWORD="$3"

# Den Login-Namen abfragen
#read -p 'Bitte den Login-Namen eingeben: ' USERNAME

# Den vollständigen Namen abfragen
#read -p 'Bitte den vollständigen Namen eingeben: ' COMMENT

# Das Passwort abfragen
#read -p 'Bitte Das Paswort eingeben: ' PASSWORD

# Den Benutzer anlegen
useradd -m -c "$COMMENT" -s /bin/zsh $USERNAME

# Das Passwort setzen 
echo "$SUERNAME:$PASSWORD | chpasswd # chpasswd muss verwendet werden, da passwd nicht über ein skript funktioniert
```

# Parameter übergeben

```bash
#!/bin/bash

# Parameter prüfen
if [[ $# -lt 1 ]];then 
  echo "Syntax: parameter.sh USERNAME [USERNAME2]"
fi

# Parameter auslesen
echo "Name des Sktips: $(basename $0)" # mit $(basename) nur den Namen des Skripts anzeigen lassen $(dirname) würde den Pfad anzeigen
echo "Erster Parameter: $1"
echo "Zweiter Parameter: $2" 
echo "Alle Parameter: $@"
echo "Du hast $# Parameter übergeben" 
```

# Zufall Random

```bash
$RANDOM

#Datum in Sekunden
date +%s 

#Datum in Nanosekunden und Random wert
echo "$(date +%s%N)$RANDOM"

# Hashwert erstellen
echo "$(date +%s%N)$RANDOM" | sha512sum

# Reduzieren auf die ersten 8 Zeichen
echo "$(date +%s%N)$RANDOM" | sha512sum | head -c8 
```

# For-Schleife mit Zufallspasswort Random und While-Schleife

```bash
#!/bin/bash

# Wert in einer For-Schleife verarbeiten 
for USER in $@
do 
  useradd -m $USER
  PASSWORD=$(echo "$(date +%s%N$RANDOM)" | sha512sum | head -c8)
  echo "$USER:$PASSWORD" | chpasswd
  passwd -e $USER # Dadurch muss der User das Passwort bei der ersten Anmeldung ändern
  echo "User: $USER - Passwort: $PASSWORD" 
done
```

## Parameter aus einer Datei auslesen

```bash
#!/bin/bash

# Wert in einer For-Schleife verarbeiten 
for USER in $(cat /home/eric/bin/user.txt)
do 
  useradd -m $USER
  PASSWORD=$(echo "$(date +%s%N$RANDOM)" | sha512sum | head -c8)
  echo "$USER:$PASSWORD" | chpasswd
  passwd -e $USER # Dadurch muss der User das Passwort bei der ersten Anmeldung ändern
  echo "User: $USER - Passwort: $PASSWORD" 
done
```

##  Mit Laufvariable

```bash
#!/bin/bash

for (( i=1; 1<11; i++ )); do 
  echo $i
done

echo "Die schleife wurde beendet"
```

## While Schleife

```bash
#!/bin/bash

# While-Schleife PoC

WEITER="j"

while [[ "$WEITER" 0 "j" ]]; do
  echo "While-Schleife wird ausgeführt" 
  read -p "Weiter? j/n " WEITER
done
echo "Schleife beendet"
```

# Case - Kontrollstruktur

##  Beispiel mit if

```bash
#!/bin/bash

# Programmverzweigung mit 
if [[ "#$" -ne 2 ]]; then
  echo "Syntax: case.sh AKTION DIENST" 
  exit 1
fi

if [[ "$1" = "start" ]];then
  echo "$2 wird gestartet" 
  exit 0 
fi

elif [[ "$1" = "stop" ]];then
  echo "$2 wird gestopt"
  exit 0 
fi 
```

## Umsetzung mit Case

```bash
#!/bin/bash

if [[ "#$" -ne 2 ]]; then
  echo "Syntax: case.sh AKTION DIENST" 
  exit 1
fi

# Verzweigung mit case

case $1 in 
  start)
    echo "$2 wird gestartet" 
    ;;
  stop)
    echo "$2 wird gestopt" 
    ;;
  restart)
    echo "$2 wird neu gestartet" 
    ;;
  status|state) # mit der pipe können wir mehrere möglichkeiten bieten diesen teil aufzurufen
    echo "Der Satus von $2 wird angezeigt" 
    ;;
  *)
    echo "Der Parameter ist unbekannt"
    exit 1
    ;;
esac
```

# For-Schleife

```bash
#!/bin/bash

echo "Die übergebenen Usernamen sind: $@"

# Alle Parameter (User) ausgeben
for USER in $@
do 
  echo "User im Aktuellen For-Schleifen-Durchlauf: $USER"
done
```

# Datei per Skipt verschlüsseln

anschließend eine Datei mit `ccrypt` verschlüsselt:

```
#!/bin/bash

# Datei, die verschlüsselt werden soll
read -p "Bitte den Dateinamen eingeben, der verschlüsselt werden soll: " datei

# Passwort verdeckt eingeben
echo -n "Bitte das Passwort eingeben: "
read -s passwort
echo

# Datei mit ccrypt verschlüsseln
echo "$passwort" | ccrypt -e -k - "$datei"

# Überprüfen, ob die Verschlüsselung erfolgreich war
if [ $? -eq 0 ]; then
    echo "Die Datei wurde erfolgreich verschlüsselt."
else
    echo "Fehler bei der Verschlüsselung der Datei."
fi

```

Speichere dieses Skript in einer Datei, z.B. `encrypt.sh`, und mache es ausführbar mit:

```
chmod +x encrypt.sh

```

Dann kannst du es ausführen mit:

```
./encrypt.sh

```

Dieses Skript fordert den Benutzer auf, den Dateinamen und das Passwort einzugeben. Das Passwort wird verdeckt eingegeben (d.h. es wird nicht auf dem Bildschirm angezeigt). Anschließend wird die Datei mit `ccrypt` verschlüsselt.