Kreditrückzahlung
From S23Wiki
Bash-Script zur Berechnung einer Kreditrückzahlung
#!/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 ---->"

