Linux 执行数学运算

expr命令python

root@pts/0 # expr 1 + 5 
6

expr命令操做符shell

操做符 描述
ARG1 | ARG2 若是没有参数是null或零值,返回ARG1,不然返回ARG2
ARG1 & ARG2 若是没有参数是null或零值,返回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 若是ARG1大于或等于ARG2,返回1,不然返回0
ARG1 > ARG2 若是ARG1大于ARG2,返回1,不然返回0
ARG1 + ARG2 返回ARG1和ARG2的算术运算和
ARG1 - ARG2 返回ARG1和ARG2的算术运算差
ARG1 * ARG2 返回ARG1和ARG2的算术乘积
ARG1 / ARG2 返回ARG1被ARG2除的算术商
ARG1 % ARG2 回ARG1被ARG2除的算术余数
STRING:REGEXP 若是REGEXP匹配到了STRING中的某个模式,返回该模式匹配
match STRING REGEXP 若是REGEXP匹配到了STRING中的某个模式,返回该模式匹配
substr STRING POS LENGTH 返回起始位置为POS(从1开始计数)、长度为LENGTH个字符的子字符串
index STRING CHARS 返回在STRING中找到CHARS字符串的位置,不然返回0
length STRING 返回字符串STRING的数值长度
+ TOKEN 将TOKEN解释成字符串,即便是个关键字
(EXPRESSION) 返回EXPRESSION的值

&#160;express

使用方括号[ ]bash

root@pts/0 # cat test    
#!/bin/bash
var1=30
var2=5
var3=$[$var1 / $var2]
var4=$[$var3 * 2]

echo The result is $var4
Test_2 [~] 2015-10-09 00:49:44
root@pts/0 # ./test   
The result is 12

&#160;ui

注意:bash shell数学运算符只支持整数运算,以下:spa

root@pts/0 # cat test   
#!/bin/bash
var1=100
var2=45
var3=$[$var1 / $var2]

echo The result is $var3
Test_2 [~] 2015-10-09 00:51:55
root@pts/0 # ./test   
The result is 2

&#160;code

浮点解决方案(bc)ci

root@pts/0 # 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'. 
12 * 5.4
64.8
3.156 * (3 + 5)
25.248
quit
浮点运算是由一个内建的称为scale的变量控制的,你必须将这个值设置为结果里你想要的小数后的位数,不然你不会获得想要的结果:
root@pts/0 # bc -q 
3.44 / 5
0
scale=4
3.44 / 5
.6880
quit

scale变量默认值是0,将其设置成4后,bash计算器显示的答案有四位小数,-q参数会将bash计算器输出的很长的欢迎条屏蔽掉字符串

bash计算器支持变量数学

root@pts/0 # bc -q 
var1=10
var1 * 4
40
var2 = var1 / 5print var2
2
quit

&#160;

在脚本中使用bc

var=`echo “options;&#160; expression” | bc`

options设置变量,能够用分号隔开。

root@pts/0 # cat test 
#!/bin/bash
var1=`echo "scale=4;3.44 / 5"|bc`
echo $var1
Test_2 [~] 2015-10-09 22:33:57
root@pts/0 # ./test 
.6880
root@pts/0 # cat test   
#!/bin/bash
var1=100
var2=45
var3=`echo "scale=4;$var1 / $var2"|bc`
echo $var3
Test_2 [~] 2015-10-09 22:36:21
root@pts/0 # ./test   
2.2222
root@pts/0 # cat test     
#!/bin/bash
var1=10
var2=5
var3=`echo "scale=4;$var1 / $var2"|bc`

var4=`bc << EOF
scale=4
a1 = ($var1 * $var2)
b1 = ($var3 * $var2)
a1 / b1
EOF
`


echo $var4

Test_2 [~] 2015-10-09 22:40:35
root@pts/0 # ./test   
5.0000

&#160;

退出脚本:

命令$? 查看上个执行的命令的退出状态码,退出状态码是一个0~255之间的整数值。

root@pts/0 # date 
Fri Oct  9 22:44:01 GMT 2015

Test_2 [~] 2015-10-09 22:44:01
root@pts/0 # echo $?
0
root@pts/0 # asdf
-bash: asdf: command not found

Test_2 [~] 2015-10-09 22:44:35
root@pts/0 # echo $?
127

如上,成功退出的状态码为0,无效命令返回127

Linux退出状态码

状态码 描述
0 命令成功结束
1 通用未知错误
2 误用shell命令
126 命令不可执行
127 没找到命令
128 无效退出参数
128+x Linux信号x的严重错误
130 命令经过Ctrl+C终止
255 退出状态码越界

&#160;

&#160;

exit

相关文章
相关标签/搜索