shell脚本在处理数据的时候,默认是10进制,通过特殊的标记或者前缀可以转换为其他的进制。
以 0 开头就是 8 进制.以0x 开头就是16 进制数.
1. 使用 BASE#NUMBER 这种形式可以表示其它进制.BASE值的取值范围:2-64.
2. 赋值时候用(())符号。不能直接用=号了。=号没有值类型。默认将后面变成字符串了.
3. 可以通过定义符:let达到(()) 运算效果.
- 十进制转换为其他进制
((表达式)),(())里面可以是任意数据表达式。如果前面加入:”$”可以读取计算结果。
八进制转十进制:
[email protected]:/home/baohua# echo $((num = 0123))
83
[email protected]:/home/baohua# echo $((num = 8#123))
83
十六进制转十进制:
[email protected]:/home/baohua# echo $((num=0xff))
255
[email protected]:/home/baohua# echo $((num=16#ff))
255
二进制转十进制
[email protected]:/home/baohua# echo $((num=2#11111111))
255
base-32转十进制:
[email protected]:/home/baohua# echo $((num=32#ffff))
507375
base64转十进制:
[email protected]:/home/baohua# echo $((num=64#ffff))
3994575
- 其他进制转换为十进制
十进制转八进制 bc外部命令完成。bc命令格式转换为:echo "obase=进制;值"|bc. 二进制,十六进制,base64转换为 十进制也相同方法.
[email protected]:/home/baohua# echo "obase=8;0123"|bc
173
[email protected]:/home/baohua# echo "obase=2;0123"|bc
1111011
在赋值运算中,不能再用=号,需要(())来进行赋值才可以达到进制转换,另外也可以通过定义符:let达到(()) 运算效果.
[email protected]:/home/baohua# let num=0123; [email protected]-VirtualBox:/home/baohua# echo $num 83
原文地址:https://www.cnblogs.com/rykang/p/11880609.html