: ########################################################################## # Title : base.sh - print number to different bases # Author : Heiner Steven (stv) # Date : 1995-03-07 # Requires : bc # Category : Desktop # SCCS-Id. : @(#) base.sh 1.3 04/02/18 ########################################################################## # Description # # Changes # 21-03-95 stv fixed error occuring with 0xb as input (0.2) ########################################################################## PN=`basename "$0"` # program name VER='1.3' Usage () { echo "$PN - print number to different bases, $VER (stv '95) usage: $PN [number ...] If no number is given, the numbers are read from standard input. A number may be binary (base 2) starting with 0b (i.e. 0b1100) octal (base 8) starting with 0 (i.e. 014) hexadecimal (base 16) starting with 0x (i.e. 0xc) decimal otherwise (i.e. 12)" >&2 exit 1 } Msg () { for i do echo "$PN: $i" >&2 done } Fatal () { Msg "$@"; exit 1; } PrintBases () { # Determine base of the number for i do case "$i" in 0b*) ibase=2;; # binary 0x*|[a-f]*|[A-F]*) ibase=16;; # hexadecimal 0*) ibase=8;; # octal [1-9]*) ibase=10;; # decimal *) Msg "illegal number $i - ignored" continue;; esac # Remove prefix, convert hex digits to uppercase (bc needs this) number=`echo "$i" | sed -e 's:^0[bBxX]::' | tr '[a-f]' '[A-F]'` # Convert number to decimal dec=`echo "ibase=$ibase; $number" | bc` case "$dec" in [0-9]*) ;; # number ok *) continue;; # error: ignore esac # Print all conversions in one line echo `bc <