Shell 支持多种运算符,包括:
- 算术运算符
原生bash不支持简单的数学运算,可以使用 expr,let
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件运算符
算术运算符
包括加减乘除,取余(%)、赋值(=)、相等(==)、不相等(!=)
#!/bin/bash ## 定义变量,并赋值 var1=`expr 1 + 2` var3=$(expr 1 + 2) ## 打印变量 echo "var1 is: ${var1}" echo "var3 is: ${var3}" ## 定义变量,并赋值 let var2=1+2 ## 打印变量 echo "var2 is: ${var2}"
说明:
- 使用反引号 ` ,在Esc键下面,获取表达式计算结果
- 使用$() 获取表达式计算结果
- 使用expr :表达式和运算符之间要有空格,必须写成 1 + 2
- 使用let: 表达式和运算符之间不能有空格,必须写成 1+2
- 乘号(*) 必须使用反斜杠() 进行转义
- 大括号 {},小括号 (), 大于 >,小于 <, 也需要使用反斜杠() 进行转义。如果解析错误,先排查下特殊符号,是否需要转义。
关系运算符
关系运算符只支持数字,不支持字符串(纯数字除外)
-eq : 检测左右两边的数是否相等,相等返回true
-ne : 检测左右两边的数是否不等
-gt : 类似大于
-lt : 类似小于
-ge : 类似大于等于
-le : 类似小于等于
布尔运算符
! : 非运算
-o : 或运算
-a : 与运算
&& : 逻辑的and ,与-a 类似
|| :逻辑的or ,与 -o 类似
字符串运算符
= or ==: 检测左右两边字符串是否相等,相等返回true。 if [ "$a" = "$b" ] 与 if [ "$a" == "$b" ] 等价。
!= : 检测左右两边字符串是否不相等,不相等返回true
> or < :使用双括号或者转义。 if [ "$a" > "$b" ] 或者 if [[ "$a" > "$b" ]]
-z : 检测空串,长度为0时 ,返回true
-n :检测非空串,长度不为0时,返回true
文件运算符
-f file : 检测文件是否是 普通文件(既不是目录,也不是设备文件)
-d file :检测文件是否是 目录
-r file :检测文件是否可读
-w file :检测文件是否可写
-x file :检测文件是否可执行
-s file :检测文件是否为空
-e file :检测文件(包括目录)是否存在