Bash Skripting

Benutzereingabe

#!/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

 

#!/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

#!/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

$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

#!/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

#!/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

#!/bin/bash

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

echo "Die schleife wurde beendet"

 

While Schleife

#!/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

#!/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

#!/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

#!/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.