数学运算
原生bash不支持直接的数学运算
# 若直接执行以下脚本
#! /bin/bash
var=$(3 + 4)
echo "两数之和为${var}"
# 执行脚本,得到下面报错信息
command not found
虽然不支持直接的数学运算,但是可以通过命令来实现数学运算。通常使用expr 命令来进行数学运算,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
# 执行以下脚本
#! /bin/bash
var=$(expr 3 + 4)
echo "两数之和为${var}"
# 执行脚本,得到以下结果
两数之和为 : 7
需要注意的是:
- 表达式和运算符之间要有空格,例如 3+4 是不对的,得出来的结果是“两数之和为 : 3+4”必须写成 3 + 4才能得到正确的运算结果;
- 表达式要被$() 或者
(反引号)包含,表示执行这一运算操作。
算术运算符
与我们平时使用的运算符相同
- 加法 +
- 减法 -
- 乘法 *
- 除法 /
- 取余 %
- 赋值 =
- 相等 ==
- 不相等 !=
使用算术运算符时也需要注意以下几点:
- 条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ];
- 乘号(*)前边必须加反斜杠(\ )才能实现乘法运算,[ 4 \ * 5 ];
关系运算符
重点来啦
运算符 | 作用 |
---|---|
-eq | 判断两个数是否相等,相等返回 true |
-ne | 判断两个数是否不相等,不相等返回 true |
-gt | 判断左边的数是否大于右边的,如果是,则返回 true |
-lt | 判断左边的数是否小于右边的,如果是,则返回 true |
-ge | 判断左边的数是否大于等于右边的,如果是,则返回 true |
-le | 判断左边的数是否小于等于右边的,如果是,则返回 true |
注意,以上关系运算符只支持数字或者值为数字的字符串,不支持除了值为数字以外的字符串。
布尔运算符
运算符 | 作用 |
---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true |
-o | 或运算,有一个表达式为 true 则返回 true |
-a | 与运算,两个表达式都为 true 才返回 true |
实例:
#! /bin/bash
value1=0
value2=5
value3=10
if [ ! ${value1} ]
then
echo "! 起作用啦"
else
echo "! 没有起作用"
fi
if [ ${value2} -o ${value1} ]
then
echo "${value1} 或 ${value2} 为真"
else
echo "${value1} 或 ${value2} 为假"
fi
if [ ${value1} -a ${value2} ]
then
echo "${value1} 与 ${value2} 为真"
else
echo "${value1} 与 ${value2} 为假"
fi
if [ ${value1} -a ${value3} == ${value2} ]
then
echo "${value1} 与 ${value3} 为真"
else
echo "${value1} 与 ${value3} 为假"
fi
# 结果为
! 没有起作用
0 或 5 为真
0 与 5 为真
0 与 10 为假
从结果可以看出,这与我们平时 ! 运算的要求不大一样,平时编程时 !0 即为真,但在shell里,0 为字符串,真实存在的即为真,所以 !0 为假。因此只有通过其他运算符判断为假的表达式和!共用才能整体判断为真。如if [ ${value1} -a ${value3} == ${value2} ]例子所示。
字符串运算符
运算符 | 作用 |
---|---|
= | 判断两个字符串是否相等,相等返回 true |
!= | 判断两个字符串是否相等,不相等返回 true |
-z | (zero)判断字符串长度是否为0,为0返回 true |
-n | 判断字符串长度是否为0,不为0返回 true |
$ | 判断字符串是否为空,不为空返回 true |
与上面布尔运算符不同,字符串运算符的两边为字符串,布尔运算符的两边为判断结果为true 或 false 的布尔变量。
逻辑运算符
与Java相同,&& 表示 逻辑与,|| 表示逻辑或