#!/bin/bash

array=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0 ! - _ § $ % '&' / = ? ';' , . : '|' '<' '>');

i=0;			# Laufvariable
j=${#array[*]};		# Arraylaenge, d.h. Anzahl der Elemente
declare -a password;	# Zielarry deklarieren - nicht unbedingt noetig


if (( $# != 1 ))	# Falsche Anzahl an Aufrufparametern
then
	echo "Fehler: Bitte eine positive Integer-Zahl als Argument übergeben"
	echo Usage: ./password password_length
	exit 1
fi
if [ $1 = "--help" ]	# Hilfe...
then
	echo Script zum Erstellen von Passwörtern variabler Länge
	echo Usage: ./password password_length
	exit 0
fi

if [ "${1//[^0-9]/}" == "$1" ]		# ueberpruefen, ob PAramter eine Zahl ist
then
	echo "Passwort wird erstellt..."
	echo 
else 
	echo "Der übergebene Paramteter ist keine positve Zahl!"
	echo Usage: ./password password_length
	exit 1
fi


while (( $i < $1 ))	# solange Laufvariable kleiner als Laengenparamter ist....
do
	nummer=`od -w1 -t d1 -A n /dev/urandom | head -1 | sed 's/^[ \t]*//' | sed 's/-//g'`	# nummer ist eine Pseudozufallszahl
	while (( $nummer > $j ))		# solange die Nummer kleiner als Arraylaenge ist, Nummer neu erstellen
	do
		nummer=`od -w1 -t d1 -A n /dev/urandom | head -1 | sed 's/^[ \t]*//' | sed 's/-//g'`
	done
	password[$i]=${array[$nummer]};		# andernfalls Arrayelement Nummer "nummer" auswählen && passwordelement i zuweisen
	#i=`expr $i + 1`
	(( i++ ))
done


echo ${password[*]} | sed 's/ //g'
