#!/bin/bash
# Prüfe, ob die Parameteranzahl passt
if [ $# -le 0 ] || [ $# -ge 3 ]; then
    echo "Fehler. Erwarteter Aufruf lautet: v02a3 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
# Wiederhole die Passwortgenerierung 10mal
for i in {1..10}; do
    # 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 )
    # Optional: Ausgabe im Block ermöglichen
    formati=$( printf %02d $i | sed "s/^0/ /" ).
    # Passwort ausgeben
    echo "Ihr $formati Passwort lautet: $newpassword"
done
