shell进行进制换算并不难,可以使用SHELL的算术扩展
但算术扩展局限于其他进制转化成十进制,需要灵活的进行进制转化,还是需要用到bc
bc里通过设置ibase与obase可以灵活的进制转化,比如将10进制数转化成2进制
ibase用于设置输入数据的进制
obase用于输出的数据进制
细心的人也许就会发现一个问题所在,看看下边的例子:
问题出在哪里了?
实际上原因如下:
原因
先设置ibase的话,后边的obase赋值中的值是按ibase进行的
这个是习惯问题了,我们习惯上用的是十进制的,没有跟着ibase的思路转化成16进制,如果要分开赋值的话,可以这样
ibase=16
obase=A
另一个办法是先赋obase,再赋ibase
当然,还可以用同时赋值的方式
回过头来看这句话
echo "ibase=16;obase=16;2A+2B"|bc -l
03 19
这边输出是22进制,所以 19是第一位,即十进制19, 03是第二位,所以是十进制的3*22=66,加起来是85,十六进制是55
与下边的结果等同
[root@rac0 ~]# echo "ibase=obase=16;2A+2B"|bc
55
所以,要小心ibase,ibase与其他变量,如obase,scale同时设置时,就该小心了
[root@rac0 ~]# echo "ibase=16;scale=10;1/3"|bc
.3333333333333333
[root@rac0 ~]# echo "scale=10;ibase=16;1/3"|bc
.3333333333