×
Create a new article
Write your page title here:
We currently have 3,189 articles on s23. Type your article name above or create one of the articles listed here!



    s23
    3,189Articles

    Bash-Script zur Berechnung einer Kreditrückzahlung

    <highlightSyntax>

    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

    1. Ab welchem Faktor zwischen Kreditbetrag und Gesamtkosten soll vor Wucher gewarnt werden?

    wucherlimit=1.2

    1. Wieviel Jahre will man maximal zurückzahlen?

    let maxjahre=5

    drucken="n"

    1. Per default Keine zusätzliche Bestätigung der Eingabedaten? (j/n)

    eingabekorrekt="n"

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

    1. Bis der Benutzer die Eingabe bestätigt ..

    until [ $eingabekorrekt = "j" ]; do

    1. 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

    1. 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

    1. Eingabe Monatsrate / Tilgung

    read -p "Wieviel soll monatlich gezahlt werden? (€) " monatsrate

    1. 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

    1. 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

    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

    1. 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

    1. Eingabe ok
    1. Berechnung
    1. Anfangskreditbetrag für später merken, weil er jetzt heruntergezählt wird

    kreditrestbetrag=$kreditbetrag

    1. Bis der Kreditrestbetrag kleiner oder gleich 0 ist ..

    until [ $(echo "${kreditrestbetrag} > 0"| bc -l) = "0" ]; do

    1. Monat für Monat

    let monat=monat+1

    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)

    1. Die letzte Tilgungsrate, wenn der Restbetrag kleiner als die übliche Rate ist

    if [ $(echo "${tilgung} > ${kreditrestbetrag}"| bc -l) = "1" ] then tilgung=$kreditrestbetrag fi

    1. 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)

    1. 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} €"

    1. Berechnungsfortschritt zeigen (weil es lange dauern kann)

    echo -en "\033[sBerechne Monate .. [$monat] \033[u"

    1. Tilgung subtrahieren

    kreditrestbetrag=$(echo "${kreditrestbetrag}-${tilgung}" | bc -l)

    done

    1. Gesamtkosten addieren

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

    1. Kostenfaktor des Kredits errechnen

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

    1. Dauer = Anzahl der Monate im Array

    dauer=${#monatszeile[@]} trotzdem="j"

    1. 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

    1. 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

    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 ---->" </highlightSyntax>

    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.