目录
1、Shell 基本运算符
(1)、分类
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
(2)、注意
- 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
- expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
- 例如,两个数相加(注意使用的是反引号 而不是单引号):
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
两数之和为 : 4
注意:表达式和运算符之间要有空格
2、算术运算符
运算符 说明
-
+ 加法 `expr $a + $b`
-
- 减法 `expr $a - $b`
-
* 乘法 `expr $a \* $b`
-
/ 除法 `expr $b / $a`
-
% 取余 `expr $b % $a`
-
= 赋值 a=10
-
== 相等 [ $a == $b ]
-
!= 不相等 [ $a != $b ]
((i=$j+$k)) 等价于 i=`expr $j + $k`
((i=$j-$k)) 等价于 i=`expr $j -$k`
((i=$j*$k)) 等价于 i=`expr $j \*$k`
((i=$j/$k)) 等价于 i=`expr $j /$k`
实例
#!/bin/bash
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
输出结果
a + b : 30
注意:
乘号(*)前边必须加反斜杠(\)才能实现乘法运算
3、关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
运算符 说明
-eq 检测两个数是否相等 [ $a -eq $b ]
-ne 检测两个数是否不相等 [ $a -ne $b ]
-gt 检测左边的数是否大于右边的 [ $a -gt $b ]
-lt 检测左边的数是否小于右边的 [ $a -lt $b ]
-ge 检测左边的数是否大于等于右边的 [ $a -ge $b ]
-le 检测左边的数是否小于等于右边的 [ $a -le $b ]
实例
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
4、布尔运算符
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
实例
#!/bin/bash
if [ 1 -a 9 -a 2 ]
then
echo "true"
else
echo "false"
fi
#返回true
5、逻辑运算符
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]]
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]]
#!/bin/bash
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
6、字符串运算符
= 检测两个字符串是否相等 [ $a = $b ]
!= 检测两个字符串是否相等 [ $a != $b ]
-z 检测字符串长度是否为0,为0返回 true [ -z $a ]
-n 检测字符串长度是否不为0,不为0返回 true [ -n "$a" ]
str 检测字符串是否不为空,不为空返回 true [ $a ]
#!/bin/bash
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a 等于 b"
else
echo "$a = $b: a 不等于 b"
fi
7、文件测试运算符
-d file 检测文件是否是目录 [ -d $file ]
-f file 检测文件是否是普通文件 [ -f $file ]
-r file 检测文件是否可读 [ -r $file ]
-w file 检测文件是否可写 [ -w $file ]
-x file 检测文件是否可执行 [ -x $file ]
-s file 检测文件是否不为空(文件大小是否大于0) [ -s $file ]
-e file 检测文件(包括目录)是否存在 [ -e $file ]
#!/bin/bash
file="/home/sxp/shell_test.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi