您的位置:首页 > 运维架构 > Shell

[shell基础]——算术运算

2016-06-22 18:45 411 查看
shell只支持整数运算。一般可用let、expr、declare、$[]实现。

更精准的运算建议使用Linux下的bc工具——一款高精度计算语言。

1. let是shell内建的整数运算命令

## 可完成+ - * / % ** 加减乘除余幂等常规运算符
let a=1+1 ; echo $a
let b=9/4 ; echo $b
let c=10%3; echo $c
let d=a**3; echo $d

## 可完成+= -= *= /= %= 等混合运算符
x=8 ;let x-=2 echo $x
y=8 ;let y/=2 echo $y

# bash let.sh
2
2
1
8


## 移位运算
n=4
echo "obase=2;$n" | bc   #输出一个数的二进制
let "val1=$n<<2"
echo "obase=2;$val1" | bc ; echo $val1
let "val2=$n>>2"
echo "obase=2;$val2" | bc;echo $val2

# bash let.sh
100
10000
16
1
1


##按位与、按位或、按位非、按位异或运算
n1=8
n2=4
echo -n "n1:"; echo "obase=2;$n1"|bc
echo -n "n2:"; echo "obase=2;$n2"|bc
let "value=$n1|$n2"
echo -n "|或运算:"; echo "obase=2;$value"|bc
let "value=$n1&$n2"
echo -n "&与运算:"; echo "obase=2;$value"|bc
let "value=$n1^$n2"
echo -n "^异或运算:";echo "obase=2;$value"|bc

# bash let.sh
n1:1000
n2:100
|或运算:1100
&与运算:0
^异或运算:1100


## 自增自减运算
n1=10
n2=10
let  "result_1=(++n1)"   #先自增再赋值  #注意此时里面的n1并没有写成$n1

let  "result_2=(n2++)"   #先赋值再自增
echo  "n1=$n1"
echo  "n2=$n2"
echo  "result_1=$result_1"
echo  "result_2=$result_2"

#bash let.sh
11
11
11
10


2. 其他运算符$[]、expr、declare

echo $[1+1]
echo $[5/2]
echo $[2**3]

expr 2 \* 2   #注意操作数运算符的空格;和运算符的转义

declare -i J
J=1+1
echo $J

#bash test.sh
2
2
8
4
2


3.算术表达式 $([b](算术表达式)) [/b]

i=2
echo $((2*i+1))
echo $((2*(i+1)))  #可以用括号表达先计算括号里的式子

#bash test.sh
5
6


4. bc工具(更常用)

echo "3^2" |bc   #注意怎么写

echo "scale=3;10/3" |bc  #scale=n表示保留n为小数

#bash test.sh
9
3.333
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: