Linux shell 中的四则运算
Linux shell中执行echo 1+1
的输出结果是1+1
,
而非2
。如果想输出2
, 可以使用如下方法:
利用()
1 | ((i=$j+$k)) # 等价于 i=`expr $j + $k` |
利用Let
执行一个或多个表达式
1 | let i=i+1 or let "i = i + 1" |
Shell中常用的数学运算符如下所示。 1
2
3
4
5
6
7
8
9
10
11
12+:对两个变量做加法。
-:对两个变量做减法。
*:对两个变量做乘法。
/:对两个变量做除法。
**:对两个变量做幂运算。
%:取余运算, 第一个变量除以第二个变量求余数。
+=:加等于, 在自身基础上加第二个变量。
-=:减等于, 在第一个变量的基础上减去第二个变量。
*=:乘等于, 在第一个变量的基础上乘以第二个变量。
/=:除等于, 在第一个变量的基础上除以第二个变量。
%=:取余赋值, 第一个变量对第二个变量取模运算, 再赋值给第一个变量。
利用expr
改变运算顺序。
1 | echo `expr 1 +2` |
用$[]
表示数学运算。
1 | echo$[1+2] |
下面是一个shell程序实例,
实现数学函数S=3(xy)+4x2+5y+6的运算。在程序中以位置变量的方式输入x与y的值。程序的编写步骤如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#!/bin/bash
#4.4.sh
s=0 #定义一个求和变量, 初值为0。
t=`expr$1**$2` #用expr改变运算顺序, 求x的y次方。
t=$[t*3] #t乘以3。
s=$[s+t] #结果相加。
t=$[$1**2] #求x的平方。
t=$[t*4] #结果乘以4。
s=$[s+t] #结果相加。
t=`expr$2*5` #求5y的值。
s=$[s+t] #结果相加。
s=$[s+6] #结果加上6。
echo$s #输出结果。
echo$((a%b)) #取余
# ./4.4.sh 2 4
# output: 90
利用 bc
1 | variable=$(echo "OPTIONS; OPERATIONS" | bc) |
bc命令,可以执行浮点运算和一些高级函数,比如: 1
echo "1.21*3" | bc
1
echo "scale=2;3/8" | bc
1
2
3#!/bin/bash
abc=192
echo "obase=2;$abc" | bc
将二进制转换为十进制: 1
2
3#!/bin/bash
abc=11000000
echo "obase=10;ibase=2;$abc" | bc1
2echo "10^10" | bc
echo "sqrt(100)" | bcbc
命令,进入一个交互式的环境,进行运算,然后通过quit
命令退出
支持变量、自增、自减等操作 1
2
3
4
5
6
7pie=3.14
r=3
pie*r*r
r++
--r
echo $(seq -s "+" 10)=`seq -s "+" 10|bc`
Copy from taijianyu