Shell 中提供了三种算术表达式的计算 let 、 expr 、(())
1) let
let 用于计算表达式的值,可以同时计算多个表达式
返回值:取决于最后一个表达式,非零返回0,否则返回1
[root@localhost Shell]# a=1
[root@localhost Shell]# b=0
[root@localhost Shell]# let a++ b++
[root@localhost Shell]# echo $?
1
[root@localhost Shell]# echo $a $b
2 1
[root@localhost Shell]#
[root@localhost Shell]# a=1
[root@localhost Shell]# b=1
[root@localhost Shell]# let a++ b++
[root@localhost Shell]# echo $?
0
[root@localhost Shell]# echo $a $b
2 2
[root@localhost Shell]#
从上面可以看到,let 支持c风格的表达式(免去$符号)
2) expr 和let 一样,可以计算表达式的值,但是和let不同,每次只能输入单个的表达式。expr支持的操作 & 、| 、 > 、< 、 >=、<=、 + 、-、*、/、%。
返回值:
表达式结果非零则为0,否则为零,如果语法错误,返回2,如果出现错误,则是3
expr 除了能计算数学表达式外,还提供了一组计算字符串的能力
#1,获取字符串长度
[root@localhost Shell]# expr length jerry
5
[root@localhost Shell]#
#2,找到字符串索引
[root@localhost Shell]# expr index jerry re
2
[root@localhost Shell]# expr index jerry rx
3
[root@localhost Shell]#
返回的是被查找的字符串中第一个出现的字母的位置 从1开始
#3,获得子串
[root@localhost Shell]# expr substr jerry 3 10
rry
[root@localhost Shell]#
如果参数超出长度范围,则从起始位置开始到末尾
#4,字符串匹配
[root@localhost Shell]# expr match jerry jerry
5
返回匹配的字符串的长度
#5, 对于index、match等关键字的匹配 使用quote 或者 +号
[root@localhost Shell]# expr index index d
expr: 语法错误
[root@localhost Shell]# expr index +index d
4
[root@localhost Shell]#
3) (()) 可以计算多个表达式,可以像let一样实现c风格的计算,也可以用在for if 等结构中
返回值,最后一个表达式的值为0,则1,否则为0
[root@localhost Shell]# ((a=0,b=1))
[root@localhost Shell]# echo $?
0
[root@localhost Shell]# ((a=1,b=0))
[root@localhost Shell]# echo $?
1
[root@localhost Shell]#
[root@localhost Shell]# for((i=0;i<100;i++))
> do
> ((total+=i))
> done
[root@localhost Shell]# echo $total
4950
[root@localhost Shell]#
可以对(())求值,值为最后一个表达式的值
[root@localhost Shell]# x=$((a=1,b=2))
[root@localhost Shell]# echo $x
2
[root@localhost Shell]#