#!/bin/bash # convertatemp--Temperature conversion script that lets the user enter # a temperature in Farenheit, Celsius, or Kelvin and receive the # equivalent temperature in the other two units as the output # Usage Examples: # convertatemp 212 # default behavior, farenheit conversion # convertatemp 100C # celsius conversion # convertatemp 100K # kelvin conversion # just a test of debugging mode using set (comment out later) #set -n if [ $# -eq 0 ] ; then # if no arguments are passed # then redirect from EOF (End of FILE) the string until another EOF caps off the string. # essentially, this just prints a message to the user about how to use the script. cat << EOF >&2 Usage: $0 temperature[F|C|K] where the suffix: F indicates input is in Fahrenheit (default) C indicates input is in Celsius K indicates input is in Kelvin EOF exit 1 # and exit with an error status fi # the variable, $unit is assigned the echoed first argument, which is piped to sed, which takes a regular expression that expects any amount of digits # the '-' means to include anything but the following, which essentially means unit becomes just the letter passed (f,c,k) # this is then piped to tr (transform), which takes strings and converts them, in this case all lowercase is converted to uppercase unit="$(echo $1|sed -e 's/[-[:digit:]]*//g' | tr '[:lower:]' '[:upper:]' )" # the $temp variable is assigned the first parameter's digits only temp="$(echo $1|sed -e 's/[^-[:digit:]]*//g')" case ${unit:=F} # if the unit's final character is F... in F ) # Farenheit to Celsius formula: Tc = (F - 32) / 1.8 farn="$temp" cels="$(echo "scale=2;($farn - 32) / 1.8" | bc)" kelv="$(echo "scale=2;$cels + 273.15" | bc)" ;; C ) # Celsius to Fahrenheit formula: Tf = (9/5)*Tc+32 cels="$temp" kelv="$(echo "scale=2;$cels + 273.15" | bc)" farn="$(echo "scale=2;(1.8 * $cels) + 32" | bc)" ;; K ) # Celsius = Kelvin - 273.15, then use Celsius -> Fahrenheit formula kelv="$temp" cels="$(echo "scale=2;($kelv - 32) / 1.8" | bc)" farn="$(echo "scale=2;(1.8 * $cels) + 32" | bc)" ;; *) # otherwise, if F,C, or K are not passed, then... echo "Given temperature unit is not supported" exit 1 # and exit with an error status. esac #Finally, we simply print back the results echo "Fahrenheit = $farn" echo "Celsius = $cels" echo "Kelvin = $kelv" # and exit with a success/ok status exit 0