Linux/unix不同shell环境下数值运算的处理
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-30
body {
background: #ffffff;
margin:0px;
padding:0px;
font-size:12px;
overflow:auto;
scrollbar-face-color:#fff;
scrollbar-highlight-color:#c1c1bb;
scrollbar-shadow-color:#c1c1bb;
scrollbar-3dlight-color:#ebebe4;
scrollbar-arrow-color:#cacab7;
scrollbar-track-color:#f4f4f0;
scrollbar-darkshadow-color:#ebebe4;
word-wrap: break-word;
font-family: ''Courier New'', Courier, ''宋体'';
}
在阅读本文前,您需要对变量替换、命令替换和数值替换有一点认识.
阅读完本文,您应该获得解决下列问题的信息:
$[] 适用范围:只适用于bash,而sh(如solaris的默认shell)、ksh(如IBM AIX的默认shell)、csh都不支持. 注意我们要计算10 2*((3 1)*(5-1)/2) 需要机变一下,通过这种方式 echo $[10 2*$[$[3 1]*$[5-1]/2]] 注意中间不能有空格否则就会被错误解析. [附注] 运算方式五:关于进制的处理 关于进制:表达和使用不同的进制.数字可以表达为二进制数、十进制数和十六进制数等等,范围从2进制~36进制. 我们用下面的形式实现: $ echo $[8#17] 15 $ echo $[16#b] 11 实际中我们甚至可以计算7进制的一个数6543210的值表示的10进制是多少. echo $[7#6543210] 注意上面的操作只是bash上的小技巧,ksh和csh都不支持. 运算方式二: (()) 适用范围:只适用于bash和ksh,不支持csh. ((sum=10 2*((((3 1))*((5-1))/2))));echo $sum; 运算方式三: expr命令 适用范围:包括bash、ksh、csh、sh的大部分shell,但有一点要特别注意就是一定要转义shell环境下的特殊字符. 要特别注意: 对表达式 (Expression) 参数应用以下规则 用空格隔开每个项; 用 (反斜杠)放在 shell 需要转义的字符前; 对包含空格和其他特殊字符的字符串 (字符参与运算) 要用引号括起来; expr ( 10 2 * ( ( 3 1 ) * ( 5 - 1 ) / 2 ) ) 通用的做法是:"(" ")" "|" "!" 和 "*" ">" "<"都需要转义. 更多信息请查看其帮助,man expr 运算方式四: awk命令 适用范围:这种方法是一种机变吧,适用于所有系统中包含了awk命令的shell环境,支持的数字函数也很多. 使用awk,awk的命令内部使用的是类C的,也不用考虑括号会被识别为其它子程序的情况. awk ''BEGIN{sum=10 2*((3 1)*(5-1)/2)} END{print sum}'' /dev/null 至于awk都支持哪些数学函数,欢迎大家参照我后续的文章. 运算方式六:关于小数的处理 bc命令 适用范围:包括bash、ksh、csh、sh的大部分shell. 也许大家都注意到了,上面提到的方式除了使用awk命令以外,运算结果都是被四舍五入过的整数值,但是实际中精确地保留一定位数的小数也很必要,这时我们就要用到bc这个数学工具了. 如果要熟练地使用bc,不只要对bc命令有一定的了解,对于命令替换(Command Substitution)、命令重定向(Input Redirect & Output Redirect)也要有清晰的认识. 对于bc命令 $ bc scale=4 #计算结果保留到小数点后四位 10/2 5.0000 obase=16 #计算的结果以十六进制表达 ibase=10 #输入的数值被识别为十进制 10/2 5.000 17/2 8.800 scale=0 #运算结果为整数 17/2 8 quit 这样我们就可以通过bc命令来计算10 2*((3 1)*(5-1)/2)的值了,并且让计算结果精确到小数点后的四位. # echo `echo "scale=4;10 2*((3 1)*(5-1)/2)" | bc ` 26.0000 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Linux服务器部署系列之二:打印服务器下一篇: Nagios监控系统配置过程2
关于Linux/unix不同shell环境下数值运算的处理的所有评论