#!/bin/bash
# Prüfe, ob die Parameteranzahl passt
if [ $# -le 0 ] || [ $# -ge 3 ]; then
    echo "Fehler. Erwarteter Aufruf lautet: v02a2 Passwortlänge [Zeichenvorrat]." >&2
    exit 1
fi
# Optional: Prüfe, ob die Passwortlänge tatsächlich eine Zahl ist
if ! [[ $1 == ?([0-9]*) ]]; then
    echo "Fehler. Passwortlänge ($1) muss eine Zahl sein." >&2
    exit 1
fi
# Definiere den Zeichensatz für das Passwort...
if [ $# -eq 1 ]; then
    # ...via Standardzeichensatz mangels Parameter "Zeichenvorrat"
    characters="a-zA-Z0-9~!@#$%^&*_-"
else
    # ...via Parameter "Zeichenvorrat"
    characters=$2
fi
# Generiere das Passwort indem
# 1. aus /dev/urandom ein großer Block geholt wird
# 2. mittels tr dieser Block auf den Zeichenvorrat reduziert wird
# 3. die ersten Zeichen bis zur Passwortlänge abgegriffen werden
newpassword=$( head /dev/urandom | tr -dc $characters | head -c $1 )
# Passwort ausgeben
echo "Ihr Passwort lautet: $newpassword"
