1、expr 用法比较麻烦很少使用。
示例:
[jamin@localhost ~]$ expr 1 + 2
3
+ 号两边必须有空格
[jamin@localhost ~]$ expr 3 \* 2
6
* 号是特殊字符。
2、使用[ ]
示例:
[jamin@localhost ~]$ echo $[ 1 + 2 ]
3
[jamin@localhost ~]$ echo $[ 3 * 2 ]
6
shell 中使用:
#!/bin/bash
a=100
b=2
c=5
echo $[ $a - $[$b * $c] ]
3、使用双括号 (())
$ echo $((3 + 2))
5
echo $(( 3 * 2 ))
6
shell 中使用:
#!/bin/bash
a=100
b=2
c=5
echo $(( $a - $(($b * $c)) ))
1、bash 计算器bc。bc 中一种编程语言,它允许输入浮点数进行计算。
安装bc
$sudo yum install bc -y
示例:先输入bc 命令
$ bc #bc -p 可以去除下面的欢迎信息
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'.
2 + 3
5
2 * 3
6
2 - 3
-1
2.2 * 3.3
7.2
2/3
0
上面的示例中,乘法和除法并没有得到我们想要的结果。
浮点运算是由内建变量scale控制的。必须将这个值设置为你希望在计算结果中保留的小数位数,否则无法得到期望的结果。
接着上面示例
scale=4
2.2 * 3.3
7.26
a=100 #定义变量后,可以在整个bc 会话中使用了。重新进入bc ,变量消失
b=5
c=2
print a #print 可以打印变量的值
shell 中使用bc
示例:
#!/bin/bash
var=$(echo "scale=4;a=10;b=3; a / b" | bc)
echo $var
注:定义多个变量用‘;’号隔开,变量a,b 也可以在shell 中定义。如下:
#!/bin/bash
a=10
b=3
var=$(echo "scale=4; $a / $b " | bc)
echo $var
计算式比较长时,上面处理不方便。bc命令能识别输入重定向,但是这样要把表达示写入文件中,也不可取。
最好的办法是使用内联输入重定向,它允许你直接在命令行中重定向数据。
示例:使用等差数列求和公式(S = n*a1 + n(n-1)*d/2 )计算1...100 的和
#!/bin/bash
a1=1
n=100
d=1
sum=$(bc << EOF
sum_1 = $n * $a1
sum_2 = $n * ($n - 1) * $d / 2
sum_1 + sum_2
EOF
)
注:EOF文本字符串标识了内联重定向数据的起止。仍然需要命令替换符号将bc命令的输出赋给变量
示例:
[jamin@localhost ~]$ expr 1 + 2
3
+ 号两边必须有空格
[jamin@localhost ~]$ expr 3 \* 2
6
* 号是特殊字符。
2、使用[ ]
示例:
[jamin@localhost ~]$ echo $[ 1 + 2 ]
3
[jamin@localhost ~]$ echo $[ 3 * 2 ]
6
shell 中使用:
#!/bin/bash
a=100
b=2
c=5
echo $[ $a - $[$b * $c] ]
3、使用双括号 (())
$ echo $((3 + 2))
5
echo $(( 3 * 2 ))
6
shell 中使用:
#!/bin/bash
a=100
b=2
c=5
echo $(( $a - $(($b * $c)) ))
上面的示例中没有列出除,因为shell 只支持整数运算。
双括号的数学表达式 (( expression ))
可以使用的命令符号
var++ 后增
var-- 后减
++var 先增
--var 先减
! 逻辑求反
~ 位求反
** 幂运算
<< 左移位
>> 右移位
& 位布尔和
| 位布尔或
&& 逻辑和
|| 逻辑或
示例:
$ echo $((100 ** 2))
10000
注:也可以使用到 if 语句中。
简单示例:
#!/bin/bash
a=100
if (( $a ** 2 > 1000 ));then
a2 = $(($a ** 2))
echo "100 square is $a2"
fi
for 循环计算1...10的和
#!/bin/bash
sum=0
for (( i=1;i<11;i++ ))
do
sum=$(($sum+$i))
done
echo $sum
1、bash 计算器bc。bc 中一种编程语言,它允许输入浮点数进行计算。
安装bc
$sudo yum install bc -y
示例:先输入bc 命令
$ bc #bc -p 可以去除下面的欢迎信息
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'.
2 + 3
5
2 * 3
6
2 - 3
-1
2.2 * 3.3
7.2
2/3
0
上面的示例中,乘法和除法并没有得到我们想要的结果。
浮点运算是由内建变量scale控制的。必须将这个值设置为你希望在计算结果中保留的小数位数,否则无法得到期望的结果。
接着上面示例
scale=4
2.2 * 3.3
7.26
a=100 #定义变量后,可以在整个bc 会话中使用了。重新进入bc ,变量消失
b=5
c=2
print a #print 可以打印变量的值
shell 中使用bc
示例:
#!/bin/bash
var=$(echo "scale=4;a=10;b=3; a / b" | bc)
echo $var
注:定义多个变量用‘;’号隔开,变量a,b 也可以在shell 中定义。如下:
#!/bin/bash
a=10
b=3
var=$(echo "scale=4; $a / $b " | bc)
echo $var
计算式比较长时,上面处理不方便。bc命令能识别输入重定向,但是这样要把表达示写入文件中,也不可取。
最好的办法是使用内联输入重定向,它允许你直接在命令行中重定向数据。
示例:使用等差数列求和公式(S = n*a1 + n(n-1)*d/2 )计算1...100 的和
#!/bin/bash
a1=1
n=100
d=1
sum=$(bc << EOF
sum_1 = $n * $a1
sum_2 = $n * ($n - 1) * $d / 2
sum_1 + sum_2
EOF
)
注:EOF文本字符串标识了内联重定向数据的起止。仍然需要命令替换符号将bc命令的输出赋给变量