shell编程语言当中不可避免的要使用到数值计算来解决过程问题,最近看了Richard Blum写的《linux 命令行和shell脚本编程》这本书,发现里面东西总结的都挺好的,现在废话就不多说了,直奔主题.
方式一:使用expr
这种表达方式可以应用与基于整数和部分字符串的处理。
格式: expr 操作符 这个表达式返回计算结果:
其中 操作符有
ARG1 | ARG2 如果两个参数都不为空或都不为0,则返回ARG1,否则,返回ARG2
ARG1 & ARG2 如果两个参数都不为空或都不为0,则返回ARG1,否则,返回0
ARG1 > ARG2 如果ARG1大于ARG2,返回1,否则返回0
ARG1 >= ARG2 如果ARG1大于或等于ARG2,返回1,否则返回0
ARG1 < ARG2 如果ARG1小于ARG2,返回1,否则返回0
ARG1 <= ARG2 如果ARG1小与或等于ARG2,返回1,否则返回0
ARG1 + - * / % ARG2 返回各类数值计算的值
index STRING CHARS 返回在STRING中找到CHARS的位置,否则返回0
length STRING 返回STRING的长度
+ TOKEN 将TOKEN解释为一字符串,即使它是一个关键字
(EXPRESSION) 返回EXPRESSION的值
eg:
$ expr 10 * 5
50
//下面的除法运算符需要转义,有些情况下连乘法也需要转义
$ expr 10 /2
expr: syntax error
$ expr 10/2
10/2
$ expr 10 \/ 2
5
$
提示:
expr还有较为高级的表示方式
$[OPERATION]
eg
root@jiangjian-K42JZ:~# tmp=$[10-9]
root@jiangjian-K42JZ:~# echo $tmp
1
root@jiangjian-K42JZ:~# tmp=$[10*9]
root@jiangjian-K42JZ:~# echo $tmp
90
root@jiangjian-K42JZ:~# tmp=$[10 / 5]
root@jiangjian-K42JZ:~# echo $tmp
2
root@jiangjian-K42JZ:~# tmp=$[10+5]
root@jiangjian-K42JZ:~# echo $tmp
15
root@jiangjian-K42JZ:~#
在以上的处理过程当中只涉及到整数
方式 二 使用bc解决浮点类运算
bc是shell当中的一个计算命令,其中内部有一个内置环境变量scale,这个变量用于定义获取到小数点的位数,退出程序输入quit
root@jiangjian-K42JZ:~# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=4
1/3
.3333
quit
root@jiangjian-K42JZ:~#
如果在脚本中使用可以尝试使用
varible=`echo "option; expression" |bc`
其中option可以设置多个参数,下面是一个脚本案例:
root@jiangjian-K42JZ:~# vi example
root@jiangjian-K42JZ:~# chmod u+x example
root@jiangjian-K42JZ:~# cat example
#!/bin/bash
var=`echo "scale=6; 1/3 " |bc `
echo $var
root@jiangjian-K42JZ:~# ./example
.333333
root@jiangjian-K42JZ:~#
希望能对大家有帮助!