Fahrenheit / Celsius temperature converter - follow-up
shift shifts the command line argument list by n, or by 1 if n is unspecified.
For example, given -c 25, the value of $1 is -c.
After you call shift without parameters,
it shifts the parameters by 1, so $1 becomes 25.
You used it correctly.

Use here-documents

This is hard to read:


echo -e "usage: temp [-f][-c]|[number]|[-h]\nExample:\n\ttemp -f 54\n\ttemp -c 24.5\n"



Using a here-document, it becomes much easier to read:

usage() {
    cat &lt;&lt; EOF
usage: temp [-f][-c]|[number]|[-h]
Example:
    temp -f 54
    temp -c 24.5
EOF
}


Simplify conditions

This can be written slightly simpler:


if [ "$1" = "" ]; then



Like this:

if [ ! "$1" ]; then


This can be written much simpler:


elif [[ "$3" != "" ]]; then
    usage
    exit 1
fi
while [ "$1" != "" ]; do



Like this:

elif [[ "$3" ]]; then
    usage
    exit 1
fi
while [ "$1" ]; do


Simplify the bc calls

These statements are unnecessarily complicated:


-f )    shift
        RES="$(echo "scale=2; (${1}-32)*5/9" | bc -q -l; printf "\b˚C")"
        echo "${1}˚F = "${RES}
        exit
        ;;

-c )    shift
        RES="$(echo "scale=2; ${1}*9/5+32" | bc -q -l; printf "\b˚F")" 
        echo "${1}˚C = "${RES}
        exit
        ;;



That is:


Doing part of the output formatting when you create RES and the other part when you echo it is confusing, it would be better to separate
Printing a backspace character becomes unnecessary when you separate the calculation and display formatting of RES
The quoting around $(...) is unnecessary
Instead of echo-ing the command for bc, a here-string would be better


Like this:

RES=$(bc -q &lt;&lt;&lt; "scale=2; ${1}*9/5+32")
echo "${1}˚C = ${RES}˚F"


Notice how the assignment of RES has only calculation logic, no display logic. All the display logic is on the next line.
The result is cleaner and shorter.