The classical way to convert an integer to different base, e.g. decimal (base 10) to binary (base 2), in a shell script is to use the `bc` utility as shown in the following example:
$ num=20; echo "obase=2;$num" | bc 10100 $
You do not, however, have to use this method if you are using ksh93. You can do the conversion using printf or print -f as shown in the following examples:
$ num=20; printf "%..2d\n" $num 10100 $ num=20; printf -f "%..2d\n" $num 10100 $ num=20; printf "%..8d\n" $num 24 $ num=20; printf "%..16d\n" $num 14 num=20; printf "%16.2.16d\n" $num 14 $ num=20; printf "%#.2.16d\n" $num 16#14 $ num=20; printf "%#8.2.16d\n" $num 16#14 $ num=20; print -f "%#8.2.16d\n" $num 16#14 $
This functionality is tersely documented in the output of printf –man
– Each of the integral format specifiers can have a third modifier after width and precision that specifies the base of the conversion from 2 to 64. In this case the # modifier will cause base# to be prepended to the value.
The zsh shell is the only other shell that I am aware of which has similar builtin functionality albeit with a different syntax.
Enjoy!