算术运算符 (( ))
双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令
注意:(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。
表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔。
使用$获取 (( )) 命令的结果,这和使用$获得变量值是类似的。
((a=10+66)
((b=a-15))
计算完成后给变量赋值。
注意,使用变量时不用加$前缀,(( )) 会自动解析变量名
a=$((10+66)
b=$((a-15))
在 (( )) 前面加上$符号获取 (( )) 命令的执行结果
b=((a-15)) 这样的写法是错误的
((a>7 && b==c)) # 进行逻辑运算,在 if 语句中常会使用逻辑运算
echo $((a+10)) # 立即输出结果。 前面加$
((a=3+5, b=a+10)) # 对多个表达式同时进行计算
i=5; ((i=i*2)) # 可写为 ((i*=2))
echo $((--i)) # 自减
echo $((i++)) # 自增
c=$((4+8, i+9)) # 以最后一个表达式的结果作为整个(())命令的执行结果
echo $((a=1+2**3-5%3))
echo $((8<3)) # 逻辑运算,返回1
echo $((8==8))
if ((8>7&&5==5));then
echo yes
fi
let 命令
let 命令和双小括号 (( )) 的用法是类似的,它们都是用来对整数进行运算.(也只能进行整数运算)
let i+=8
let a+=6 c=a+b #多个表达式以空格为分隔
bc命令
bc命令可以很方便的进行浮点运算。
+ - * / ^ %
echo "1.212*3" | bc # 3.636
echo "scale=2;3/8" | bc # 0.37 。 参数scale=2是将bc输出结果的小数位设置为2位。默认保留0位
abc=365; echo "obase=2;$abc" | bc # 结果为:101101101。将十进制转换成二进制。ibase是输入的进制,obase是输出的进制,默认是十进制
abc=101101110;echo "ibase=2;$abc" | bc # 结果为:366,这是用bc将二进制转换为十进制
echo "10^10" | bc # 10000000000 。平方
echo "scale=5;sqrt(1000)" | bc # 31.62277 平方根
交互模式
shell下直接输入bc进入程序的交互模式,可scale=5设置精度
如果要使用强大的内置数学库,需要加上-l参数
bc -l -q
4/3 /*未指定精度默认保留整数*/
1
scale=5 /*指定精度为5*/
4/3
1.33333
expr命令
expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
expr length "my test" # 计算字串长度:7
expr substr "my test" 2 5 # 截取字符串:y tes
expr index "my test" t # 第一个t出现的位置:4
expr 14 % 9 # 余数:5
expr 10 + 10 # 20
expr 30 / 3 / 2 # 5
expr 30 \* 3 # 使用乘号时,必须用反斜线屏蔽其特定含义
expr 30 * 3 # 错误 expr: Syntax error
#!/bin/bash
val=`expr 3 + 8`
echo "SubValue : $val"
运算符和表达式之间必须有空格,例如2+2是不正确的
[ $a == $b ] # [$a==$b] 是不正确的。要有空格
[ $a != $b ]
关系运算符:返回 true 或 false
[ $a -eq $b ] # equal
[ $a -ne $b ] # not equal
[ $a -gt $b ] # greater than >
[ $a -lt $b ] # less than <
[ $a -ge $b ] # greater than or equal >=
[ $a -le $b ] # less than or equal <=
注意:[$a <= $b]是不正确的(条件式放在方括号内,且要有空格)
布尔运算:(与或非)
[ $a -lt 20 -a $b -gt 100 ] -a 与运算AND
[ $a -lt 20 -o $b -gt 100 ] -o 或运算OR
[ ! false ] is true.!非运算
字符串运算:
a="abc";b="edf"
[ $a = $b ] is not true.
[ $a != $b ] is true.
[ -z $a ] is not true.
[ -z $a ] is not false.
[ $a ] is not false.
========================================================
dc是压栈操作。 (desk calculator)
dc 命令结构如同一个堆栈、逆波兰表示法计算。
3
2+
p
5
4*
p
20
echo "4 3 * 2 + 1 -p"|dc #算式是:(4 * 3 + 2 - 1)