#!/bin/bash # calc--A command line calculator that acts as a frontend to bc # Establishing the amount of decimal places bc will expect, in this case the default 2 scale=2 # Establishing a show_help() function that will display a message to the user if they invoke calc, and then type help or ? show_help() { cat << EOF In addition to standard math functions, calc also supports: a % b remainder of a/b a ^ b exponential: a raised to the b power s(x) sine of x, x in radians c(x) cosine of x, x in radians a(x) arctangent of x, in radians l(x) natural log of x e(x) exponential log of raising e to the x j(n,x) Bessel function of intenger order n of x scale N show N fractional digits (default = 2) EOF } # This is a very simple script, here, as long as the arguments passed to calc are greater than 0, calc simply executes the scriptbc script we wrote earlier. if [ $# -gt 0 ] ; then exec scriptbc "$@" fi # Otherwise if no arguments are passed to calc, it opens up a prompt that displays this message echo "Calc--a simple calculator. Enter 'help' for help, 'quit' to quit." # the read command is what keeps the prompt open, here the while loop invokes the read command, # which awaits bash command, and then takes the newly created $args variable... while read command args do case $command # if the $command variable is... in quit|exit) exit 0 ;; # quit/exit causes an exit of the program with a success/ok status... help|\?) show_help ;; # help/? brings up the help message above scale) scale=$args ;; # if scale is invoked, you can change the default value of the $scale variable *) scriptbc -p $scale "$command" "$args" ;; # otherwise any other commands will simply invoke the scriptbc script esac /bin/echo -n "calc>" # afterwards which you will be returned to the calc> prompt done echo "" # after invoking calc with arguments, a blank line is printed. exit 0 # and an success/ok status is passed upon exit.