shell基本运算符:
- 算术运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
注:原bash不支持简单的数学运算。但可以通过awk 和expr(常用)命令来实现。
expr是一款表达式计算工具,它可以完成表达式的求值操作。
例:
#两个数相加使用的是反引号
val =`expr 2 + 2`
echo "$val"
结果:4
注:
- 表达式和运算符之间要有空格。
- 完整的表达式要被 ` `(反引号)包括。
算术运算符
假设变量a为10,b为20
运算符 | 举例 |
---|---|
+ | expr $a + $b 结果30 |
- | expr $a - $b 结果-10 |
* | expr $a \* $b 结果 200 |
/ | expr $b / $a 结果 2 |
% | expr $b % $a 结果0 |
= | a=$b将变量b赋值给a |
== | [ $a == $b ] 返回false |
!= | [ $a != $b ] 返回true |
注:条件表达式要放在方括号之间,并且要有空格。
乘号* 前边必须加反斜杠\ 才能进行乘法运算。
关系运算符
关系运算符只支持数字,不支持字符串,除非字串的值是数字。
假定变量a为10,b为20.
-
-ep : 检测两个数是否相等,相等返回true.
例:[ $a -eq $b ] 返回false -
-ne : 检测两个数是否不相等。
例: [ $a -ne $b ] 返回true -
-gt 相当于 >
例:[ $a -gt $b ] 返回false -
-lt 相当于 <
例:[ $a -lt $b ] 返回true -
-ge 相当于 >=
例:[ $a -ge $b ] 返回false -
-le 相当于 <=
例:[ $a -le $b ] 返回false
布尔运算符
假定变量a 、b值如上
-
! 非运算
例: [ !false ] 返回true
-
-o 或运算
例: [ $a -lt 20 -o $b -gt 100 ] 返回true
-
-a 与运算
例: [ $a -lt 20 -a $b -gt 100 ] 返回false
逻辑运算符
假定变量a为10,b为20
-
&& 逻辑运算符 AND
例:[[ $a -lt 100 && $b -gt 100 ]] 返回false
-
|| 逻辑的OR
例: [[ $a -lt 100 || $b -gt 100 ]] 返回true
字符串运算符
假定变量a为”abc“, 变量b为”efd“
-
=(!=) 检测两个字符串是否相等。
例:[ $a = $b ] 返回false
[ $a != $b ] 返回true -
-z 检测字符串长度是否为0,为0为返回true。
例: [ -z $a ] 返回false
-
-n 检测字符串长度是否为0,不为0,返回true 。
例: [ -n “$a”] 返回true
-
str 检测字符串是否为空,不为空返回true.
例: [ $a ] 返回true
文件检测运算符
文件检测运算符用于检测unix文件的各种属性。
-b file 检测文件是否是块设备文件,是则返回true
例: [ -b $file ] 返回flase
-c file 检测文件是否是字符设备文件,是返回true
例: [ -c $file ] 返回false
-d file 检测文件是否是目录,如果是,则返回true.
例: [ -d $file] 返回false
-f file 检测文件是否是普通文件,是返回true
例: [ -f $file ] 返回false
-g file 检测文件是否设置了SGID(set group id)位,如果是,返回true.
例: [ -g $file ] false
-k file 检测文件是否设置粘着位 (Sticky Bit),是返回true
例: [ -k $file ] false
-p file 检测文件是否是有名管道,是返回true
例: [ -p $file ] false
-r /-w /x file 检测文件是否可读/可写/可执行。是返回true.
例: [ -r/-w/-x $file ] false
-s file 检测文件是否为空(及文件大小是否大于0),不为空true.
例: [ -s $file ] true
-e file 检测文件(目录)是否存在,是返回true
例: [ -e $file ] true