Bash 支持很多运算符,其中包括:
- 算数运算符
- 关系运算符
- 逻辑运算符
- 字符串运算符
- 文件测试运算符
算数运算符
算术运算符包括:
其实原生bash不支持简单的数学运算,但是可以通过其他命令来实现,
例如 awk 和 expr命令,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
举例说明:
#!/bin/bash
#created by yuki on 20180723
#this script is used for doing ......
a=10
b=20
result=`expr $a + $b`
echo "a + b = $result"
result=`expr $a - $b`
echo "a - b = $result"
result=`expr $a \* $b`
echo "a * b = $result"
result=`expr $b / $a`
echo " b / a = $result"
result=`expr $b % $a`
echo "b % a = $result"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于b"
fi
运行结果:
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
a 不等于b
以下几点需要注意:
1.表达式和运算符之间要有空格。
例如: 5+10 是不对的,必须写成 5 + 10,这与我们熟悉的大多数编程语言不一样。
2.完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
3.乘号(*)前边必须加反斜杠(\)进行转义才能实现乘法运算。
4.条件表达式要放在方括号之间,并且要有空格,例如 [$a==$b] 是错误的,必须写成 [ $a == $b ]。
关系运算符
关系运算符包括:
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
举例说明:
#!/bin/bash
#created by yuki on 20180723
#this script is used for doing ......
a=5
b=10
if [ $a -eq $b ]
then
echo "eq 关系运算结果: a等于b"
else
echo "eq 关系运算结果: a不等于b"
fi
if [ $a -ne $b ]
then
echo "ne 关系运算结果: a不等于b"
else
echo "ne 关系运算结果: a等于b"
fi
if [ $a -gt $b ]
then
echo "gt 关系运算结果: a大于b"
else
echo "gt 关系运算结果: a小于等于b"
fi
if [ $a -lt $b ]
then
echo "lt 关系运算结果:a小于b"
else
echo "lt 关系运算结果:a大于等于b"
fi
if [ $a -ge $b ]
then
echo "ge 关系运算结果:a大于等于b"
else
echo "ge 关系运算结果:a小于b"
fi
if [ $a -le $b ]
then
echo "le 关系运算结果:a小于等于b"
else
echo "le 关系运算结果:a大于b"
fi
运行结果:
eq 关系运算结果: a不等于b
ne 关系运算结果: a不等于b
gt 关系运算结果: a小于等于b
lt 关系运算结果:a小于b
ge 关系运算结果:a小于b
le 关系运算结果:a小于等于b
逻辑运算符
举例说明:
#!/bin/bash
#created by yuki on 20180723
#this script is used for doing ......
a=5
b=10
if [ $a != $b ]
then
echo "!= 逻辑非运算结果:a不等于b"
else
echo "!=逻辑非运算结果: a等于b"
fi
if [ $a -lt 50 -a $b -gt 8 ]
then
echo "and 逻辑与运算结果:真"
else
echo "and 逻辑与运算结果:假"
fi
if [ $a -lt 50 -o $b -gt 12 ]
then
echo "or 逻辑或运算结果:真"
else
echo "or 逻辑或运算结果:假"
fi
if [ $a -lt 3 -o $b -gt 8 ]
then
echo "or 逻辑或运算结果:真"
else
echo "or 逻辑或运算结果:假"
fi
运行结果:
!= 逻辑非运算结果:a不等于b
and 逻辑与运算结果:真
or 逻辑或运算结果:真
or 逻辑或运算结果:真
字符串运算符
字符串运算符包括:
举例说明:
#!/bin/bash
#created by yuki on 20180723
#this script is used for doing ......
a="cfe"
b="efr"
if [ $a = $b ]
then
echo "字符串a和字符串b相等"
else
echo "字符串a和字符串b不相等"
fi
if [ $a != $b ]
then
echo "字符串a和字符串b不相等"
else
echo "字符串a和字符串b相等"
fi
if [ -z $a ]
then
echo "字符串a的长度为0,即字符串a为空?"
else
echo "字符串a的长度不为0"
fi
if [ -n $a ]
then
echo "字符串a的长度不为0"
else
echo "字符串a的长度为0,即字符串a为空?"
fi
if [ $a ]
then
echo "字符串a不为空"
else
echo "字符串不为空"
fi
运行结果:
字符串a和字符串b不相等
字符串a和字符串b不相等
字符串a的长度不为0
字符串a的长度不为0
字符串a不为空
文件测试运算符
文件测试运算符包括:
文件测试运算符用于检测 Unix 文件的各种属性。
举例说明:
例如,变量 file 表示文件“ /etc/rc.d/rc.local”,它的大小为672kb,所有者root用户具有 rwx 权限。
下面的代码,将检测该文件的各种属性:
#!/bin/bash
#created by yuki on 20180723
#this script is used for doing ......
file="/etc/rc.d/rc.local"
if [ -e $file ]
then
echo "这个已经存在"
else
echo "这个不存在"
fi
if [ -r $file ]
then
echo "当前用户可读此文件"
else
echo "当前用户没有读此文件的权限"
fi
if [ -w $file ]
then
echo "当前用户可写此文件"
else
echo "当前用户没有写此文件的权限"
fi
if [ -x $file ]
then
echo "当前用户可以执行此文件"
else
echo "当前用户没有执行此文件的权限"
fi
if [ -d $file ]
then
echo "这个是目录"
else
echo "这个不是目录"
fi
if [ -f $file ]
then
echo "这个是普通文件"
else
echo "这个不是普通文件"
fi
if [ -s $file ]
then
echo "此文件大小不为0"
else
echo "此文件大小为0,即文件内容为空"
fi
运行结果:
这个已经存在
当前用户可读此文件
当前用户可写此文件
当前用户可以执行此文件
这个不是目录
这个是普通文件
此文件大小不为0