Bash-Script zur Berechnung einer Kreditrückzahlung
<highlightSyntax>
- !/bin/bash
- Bash-Script zur Berechnung einer Kreditrückzahlung
- Eingabe: Kreditbetrag, Zinssatz, Monatsrate | Ausgabe: Laufzeit, Zinsen, Gesamtkosten
- benötigt das Programm "bc" (binary calculator) um Rechnen mit Dezimalstellen zu erlauben
- 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
- Ab welchem Faktor zwischen Kreditbetrag und Gesamtkosten soll vor Wucher gewarnt werden?
wucherlimit=1.2
- Wieviel Jahre will man maximal zurückzahlen?
let maxjahre=5
drucken="n"
- Per default Keine zusätzliche Bestätigung der Eingabedaten? (j/n)
eingabekorrekt="n"
clear echo -e " < --- --- >\n ( Kreditrückzahlung v1.0 )\n < ---------------------------- >"
- Bis der Benutzer die Eingabe bestätigt ..
until [ $eingabekorrekt = "j" ]; do
- Eingabe Kreditbetrag
read -p "Wie hoch soll der Kreditbetrag sein? (€) " 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
- Eingabe Zinsen
read -p "Zu welchem Satz wird verzinst? (%/Jahr) " zinssatz
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
- Eingabe Monatsrate / Tilgung
read -p "Wieviel soll monatlich gezahlt werden? (€) " monatsrate
- Eine Monatsrate darf nicht geringer als (der erste) Zinsanteil sein, sonst wird keine Tilgung erreicht.
minimalrate=$(echo "scale=2; $kreditbetrag*$zinssatz/1200+1" | bc -l)
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
- Will der User drucken?
read -p "Wollen sie Ergebnisse drucken ? (j/n) " 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
- 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
- User Kontrolle der Eingabe
echo -e "\nSie haben eingegeben:\nKreditbetrag: $kreditbetrag €\nZinssatz: $zinssatz % p.a.\nMonatsrate: $monatsrate €\nDrucken: $drucken" read -p "Ist das korrekt? (j/n)" eingabekorrekt
done
- Eingabe ok
- Berechnung
- Anfangskreditbetrag für später merken, weil er jetzt heruntergezählt wird
kreditrestbetrag=$kreditbetrag
- Bis der Kreditrestbetrag kleiner oder gleich 0 ist ..
until [ $(echo "${kreditrestbetrag} > 0"| bc -l) = "0" ]; do
- Monat für Monat
let monat=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)
- Die letzte Tilgungsrate, wenn der Restbetrag kleiner als die übliche Rate ist
if [ $(echo "${tilgung} > ${kreditrestbetrag}"| bc -l) = "1" ] then tilgung=$kreditrestbetrag fi
- Gesamttilgung und -zinsen addieren
gesamtetilgung=$(echo "scale=2; ${gesamtetilgung}+${tilgung}" | bc -l) gesamtezinsen=$(echo "scale=2; ${gesamtezinsen}+${zinsen}" | bc -l) zinsplustilgung=$(echo "scale=2; ${zinsen}+${tilgung}" | bc -l)
- Monatsergebnisse zunächst in Array um vor Ausgabe auf maximale Dauer prüfen zu können
monatszeile[$monat]="Monat: ${monat} Kreditrestbetrag: ${kreditrestbetrag} € Zinsen: ${zinsen} € Tilgung: ${tilgung} € Monatsrate: ${zinsplustilgung} €"
- Berechnungsfortschritt zeigen (weil es lange dauern kann)
echo -en "\033[sBerechne Monate .. [$monat] \033[u"
- Tilgung subtrahieren
kreditrestbetrag=$(echo "${kreditrestbetrag}-${tilgung}" | bc -l)
done
- Gesamtkosten addieren
gesamtekosten=$(echo "scale=2; ${gesamtetilgung}+${gesamtezinsen}" | bc -l)
- Kostenfaktor des Kredits errechnen
wucherfaktor=$(echo "scale=2; ${gesamtekosten}/${kreditbetrag}*100" | bc -l)
- Dauer = Anzahl der Monate im Array
dauer=${#monatszeile[@]} trotzdem="j"
- Zu viele Monate in der Ausgabe verhindern
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
- Ausgabe Monat für Monat aus Array
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
- Ausgabe Endabrechnung
echo -e "\nDer Kredit ist nach $monat Monaten zurückbezahlt.\nGesamte Tilgung: ${gesamtetilgung} €\nGesamte Zinsen: ${gesamtezinsen} €\nGesamte Kosten: ${gesamtekosten} € (${wucherfaktor}% des Kreditbetrages)"
- 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
- 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
- Ende
echo "<---- Auf Wiedersehen ---->" </highlightSyntax>