一本完整的描述Unix Shell 编程的工具书的所有范例

源代码在线查看: monthlypmt.sh

软件大小: 1148 K
上传用户: buptbaishikele
关键词: Shell Unix 编程 范例
下载地址: 免注册下载 普通下载 VIP

相关代码

				#!/bin/bash				# monthlypmt.sh: Calculates monthly payment on a mortgage.												#  This is a modification of code in the "mcalc" (mortgage calculator) package,				#+ by Jeff Schmidt and Mendel Cooper (yours truly, the author of this document).				#   http://www.ibiblio.org/pub/Linux/apps/financial/mcalc-1.6.tar.gz  [15k]								echo				echo "Given the principal, interest rate, and term of a mortgage,"				echo "calculate the monthly payment."								bottom=1.0								echo				echo -n "Enter principal (no commas) "				read principal				echo -n "Enter interest rate (percent) "  # If 12%, enter "12", not ".12".				read interest_r				echo -n "Enter term (months) "				read term												 interest_r=$(echo "scale=9; $interest_r/100.0" | bc) # Convert to decimal.				                 # "scale" determines how many decimal places.				  								 interest_rate=$(echo "scale=9; $interest_r/12 + 1.0" | bc)				 								 top=$(echo "scale=9; $principal*$interest_rate^$term" | bc)								 echo; echo "Please be patient. This may take a while."								 let "months = $term - 1"				# ==================================================================== 				 for ((x=$months; x > 0; x--))				 do				   bot=$(echo "scale=9; $interest_rate^$x" | bc)				   bottom=$(echo "scale=9; $bottom+$bot" | bc)				#  bottom = $(($bottom + $bot"))				 done				# ==================================================================== 								# -------------------------------------------------------------------- 				#  Rick Boivie pointed out a more efficient implementation				#+ of the above loop, which decreases computation time by 2/3.								# for ((x=1; x 				# do				#   bottom=$(echo "scale=9; $bottom * $interest_rate + 1" | bc)				# done												#  And then he came up with an even more efficient alternative,				#+ one that cuts down the run time by about 95%!								# bottom=`{				#     echo "scale=9; bottom=$bottom; interest_rate=$interest_rate"				#     for ((x=1; x 				#     do				#          echo 'bottom = bottom * interest_rate + 1'				#     done				#     echo 'bottom'				#     } | bc`       # Embeds a 'for loop' within command substitution.				# --------------------------------------------------------------------------				#  On the other hand, Frank Wang suggests:				#  bottom=$(echo "scale=9; ($interest_rate^$term-1)/($interest_rate-1)" | bc)								#  Because . . .				#  The algorithm behind the loop				#+ is actually a sum of geometric proportion series.				#  The sum formula is e0(1-q^n)/(1-q),				#+ where e0 is the first element and q=e(n+1)/e(n)				#+ and n is the number of elements.				# --------------------------------------------------------------------------												 # let "payment = $top/$bottom"				 payment=$(echo "scale=2; $top/$bottom" | bc)				 # Use two decimal places for dollars and cents.				 				 echo				 echo "monthly payment = \$$payment"  # Echo a dollar sign in front of amount.				 echo												 exit 0												 # Exercises:				 #   1) Filter input to permit commas in principal amount.				 #   2) Filter input to permit interest to be entered as percent or decimal.				 #   3) If you are really ambitious,				 #      expand this script to print complete amortization tables.							

相关资源