### Free Hosting Online for WorkStations

An Example Script

As a real-world example, we will construct a script that performs a common calculation, monthly loan payments. In the script below, we use a here document to pass a script to bc:

#!/bin/bash

# loan-calc: script to calculate monthly loan payments PROGNAME=\${0##*/} # Use parameter expansion to get basename usage () {

cat <<- EOF

Usage: \$PROGNAME PRINCIPAL INTEREST MONTHS

Where:

PRINCIPAL is the amount of the loan. INTEREST is the APR as a number (7% = 0.07). MONTHS is the length of the loan's term.

EOF

}

if ((\$# != 3)); then usage

exit 1

fi

principal=\$1 interest=\$2 months=\$3

bc <<- EOF

scale = 10

i = \$interest / 12 p = \$principal

n = \$months

a = p * ((i * ((1 + i) ^ n)) / (((1 + i) ^ n) - 1)) print a, "\n"

EOF

#!/bin/bash

# loan-calc: script to calculate monthly loan payments PROGNAME=\${0##*/} # Use parameter expansion to get basename usage () {

cat <<- EOF

Usage: \$PROGNAME PRINCIPAL INTEREST MONTHS

Where:

PRINCIPAL is the amount of the loan. INTEREST is the APR as a number (7% = 0.07). MONTHS is the length of the loan's term.

EOF

}

if ((\$# != 3)); then usage

exit 1

fi

principal=\$1 interest=\$2 months=\$3

bc <<- EOF

scale = 10

i = \$interest / 12 p = \$principal

n = \$months

a = p * ((i * ((1 + i) ^ n)) / (((1 + i) ^ n) - 1)) print a, "\n"

EOF

When executed, the results look like this:

[me@linuxbox ~]\$ loan-calc 135000 0.0775 180

[me@linuxbox ~]\$ loan-calc 135000 0.0775 180

1270.7222490000

1270.7222490000

This example calculates the monthly payment for a \$135,000 loan at 7.75% APR for 180 months (15 years). Notice the precision of the answer. This is determined by the value given to the special scale variable in the bc script. A full description of the bc script- ing language is provided by the bc man page. While its mathematical notation is slightly different from that of the shell (bc more closely resembles C), most of it will be quite fa- miliar, based on what we have learned so far.