Kreditrückzahlung

Bash-Script zur Berechnung einer Kreditrückzahlung


 * 1) !/bin/bash
 * 2) Bash-Script zur Berechnung einer Kreditrückzahlung
 * 3) Eingabe: Kreditbetrag, Zinssatz, Monatsrate  | Ausgabe: Laufzeit, Zinsen, Gesamtkosten
 * 4) benötigt das Programm "bc" (binary calculator) um Rechnen mit Dezimalstellen zu erlauben
 * 5) Initialisierung

let kreditbetrag=0 let kreditrestbetrag=0 let zinssatz=0 let zinsen=0 let monat=1 let monatsrate=0 let tilgung=0 let gesamtezinsen=0 let gesamtetilgung=0 let zinsplustilgung=0

let wucherfaktor=0 wucherlimit=1.2
 * 1) Ab welchem Faktor zwischen Kreditbetrag und Gesamtkosten soll vor Wucher gewarnt werden?

let maxjahre=5
 * 1) Wieviel Jahre will man maximal zurückzahlen?

drucken="n"

eingabekorrekt="n"
 * 1) Per default Keine zusätzliche Bestätigung der Eingabedaten? (j/n)



clear echo -e " < ---              --- >\n (    Kreditrückzahlung v1.0    )\n <  >"

until [ $eingabekorrekt = "j" ]; do
 * 1) Bis der Benutzer die Eingabe bestätigt ..

read -p "Wie hoch soll der Kreditbetrag sein? (€) " kreditbetrag
 * 1) Eingabe Kreditbetrag

while [ $(echo "${kreditbetrag} > 0"| bc -l) = "0" ]; do echo "Falsche Eingabe! $kreditbetrag < 0 und der Kreditbetrag darf nicht kleiner 0 sein." read -p "Kreditbetrag: " kreditbetrag done

read -p "Zu welchem Satz wird verzinst? (%/Jahr) " zinssatz
 * 1) Eingabe Zinsen

while [ $(echo "${zinssatz} > 0"| bc -l) = "0" ]; do echo "Falsche Eingabe! $zinssatz < 0 und der Zinssatz darf nicht kleiner 0 sein." read -p "Zinssatz: (%/Jahr) " zinssatz done

read -p "Wieviel soll monatlich gezahlt werden? (€) " monatsrate
 * 1) Eingabe Monatsrate / Tilgung

minimalrate=$(echo "scale=2; $kreditbetrag*$zinssatz/1200+1" | bc -l)
 * 1) Eine Monatsrate darf nicht geringer als (der erste) Zinsanteil sein, sonst wird keine Tilgung erreicht.

while [ $(echo "${monatsrate} > ${minimalrate}"| bc -l) = "0" ]; do echo "Falsche Eingabe! Bitte wählen sie eine Monatsrate von mindestens $minimalrate." read -p "Monatsrate: " monatsrate done

read -p "Wollen sie Ergebnisse drucken ? (j/n) " drucken
 * 1) Will der User drucken?

until [ $drucken = "j" -o $drucken = "n" ]; do echo "Falsche Eingabe! Drucken kann nur j(a) oder n(ein) sein." read -p "Drucken (j/n) ?" drucken done


 * 1) Falls kein Drucker, (zumindest kein /bin/lpr) gefunden wird, Fehlermeldungen verhindern

if [ ! -e /bin/lpr ]; then echo "Sie haben vermutlich keinen Drucker installiert, denn /bin/lpr wurde nicht gefunden. Schalte Drucken aus." drucken="n" fi echo -e "\nSie haben eingegeben:\nKreditbetrag: $kreditbetrag €\nZinssatz: $zinssatz % p.a.\nMonatsrate: $monatsrate €\nDrucken: $drucken" read -p "Ist das korrekt? (j/n)" eingabekorrekt
 * 1) User Kontrolle der Eingabe

done


 * 1) Eingabe ok


 * 1) Berechnung

kreditrestbetrag=$kreditbetrag
 * 1) Anfangskreditbetrag für später merken, weil er jetzt heruntergezählt wird

until [ $(echo "${kreditrestbetrag} > 0"| bc -l) = "0" ]; do
 * 1) Bis der Kreditrestbetrag kleiner oder gleich 0 ist ..

let monat=monat+1
 * 1) Monat für Monat


 * 1) Zinsen und Tilgung berechnen so dass sie zusammen die gewünschte Monatsrate ergeben

zinsen=$(echo "scale=2; ${kreditrestbetrag}*${zinssatz}/1200" | bc -l)

tilgung=$(echo "scale=2; ${monatsrate}-${zinsen}" | bc -l)

if [ $(echo "${tilgung} > ${kreditrestbetrag}"| bc -l) = "1" ] then tilgung=$kreditrestbetrag fi
 * 1) Die letzte Tilgungsrate, wenn der Restbetrag kleiner als die übliche Rate ist

gesamtetilgung=$(echo "scale=2; ${gesamtetilgung}+${tilgung}" | bc -l) gesamtezinsen=$(echo "scale=2; ${gesamtezinsen}+${zinsen}" | bc -l) zinsplustilgung=$(echo "scale=2; ${zinsen}+${tilgung}" | bc -l)
 * 1) Gesamttilgung und -zinsen addieren

monatszeile[$monat]="Monat: ${monat} Kreditrestbetrag: ${kreditrestbetrag} € Zinsen: ${zinsen} € Tilgung: ${tilgung} € Monatsrate: ${zinsplustilgung} €"
 * 1) Monatsergebnisse zunächst in Array um vor Ausgabe auf maximale Dauer prüfen zu können

echo -en "\033[sBerechne Monate .. [$monat] \033[u"
 * 1) Berechnungsfortschritt zeigen (weil es lange dauern kann)

kreditrestbetrag=$(echo "${kreditrestbetrag}-${tilgung}" | bc -l)
 * 1) Tilgung subtrahieren

done

gesamtekosten=$(echo "scale=2; ${gesamtetilgung}+${gesamtezinsen}" | bc -l)
 * 1) Gesamtkosten addieren

wucherfaktor=$(echo "scale=2; ${gesamtekosten}/${kreditbetrag}*100" | bc -l)
 * 1) Kostenfaktor des Kredits errechnen

dauer=${#monatszeile[@]} trotzdem="j" if [ $(echo "${dauer}/12 > ${maxjahre}"| bc -l) = "1" ] then trotzdem="n" echo -e "\nAchtung, das Rückzahlen dauert mit $dauer Monaten sehr lange." read -p "Trotzdem Details ausgeben? (j/n)" trotzdem fi
 * 1) Dauer = Anzahl der Monate im Array
 * 1) Zu viele Monate in der Ausgabe verhindern

if [ $trotzdem != "n" ] then monat=1 while [ $monat -le $dauer ]; do    echo ${monatszeile[$monat]}; # Drucken if [ $drucken == "j" ]; then echo ${monatszeile[$monat]} | lpr fi    let monat=monat+1 done fi
 * 1) Ausgabe Monat für Monat aus Array
 * 1) Ausgabe Endabrechnung

echo -e "\nDer Kredit ist nach $monat Monaten zurückbezahlt.\nGesamte Tilgung: ${gesamtetilgung} €\nGesamte Zinsen: ${gesamtezinsen} €\nGesamte Kosten: ${gesamtekosten} € (${wucherfaktor}% des Kreditbetrages)"


 * 1) Warnung falls Kredit zu teuer

if [ $(echo "${wucherfaktor} > ${wucherlimit}*100"| bc -l) = "1" ] then echo -e "\nAchtung Wucher! Gesamtkosten betragen ${wucherfaktor} % des Kreditbetrages.\nSuchen Sie besser einen anderen Kredithai oder wählen Sie eine höhere Monatsrate." fi


 * 1) Warnung falls Rückzahldauer zu lange

if [ $(echo "${monat}/12 > ${maxjahre}"| bc -l) = "1" ] then echo -e "\nAchtung das Rückzahlen dauert mehr als $(echo "scale=2; ${monat}/12"| bc -l) Jahre! Wählen Sie besser eine höhere Monatsrate." fi


 * 1) Ende

echo "< Auf Wiedersehen >" 