注:此博客使用的是Bash shell
- 算数运算符
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b |
- | 减法 | expr $a - $b |
* | 乘法 | expr $a \* $b |
/ | 除法 | expr $b / $a |
% | 取余 | expr $b % $a |
= | 赋值 | a=$b 将把变量 b 的值赋给 a |
== | 等于 | [ $a == $b ] 返回 false |
!= | 不等于 | [ $a != $b ] 返回 true |
代码举例:
#!/bin/bash
value=`expr ${1} + ${2}`
echo ${value}
value=`expr ${1} \* ${2}`
echo ${value}
value=`expr ${1} - ${2}`
echo ${value}
value=`expr ${1} / ${2}`
echo ${value}
value=`expr ${1} % ${2}`
echo ${value}
if [ ${1} == ${2} ]
then
echo "相等"
fi
if [ ${1} != ${2} ]
then
echo "不相同"
fi
输出:
cjs@cjs:~$ ./a.sh 40 20
60
800
20
2
0
不相同
注意:
还有一种方法:代码中的 [ ] 执行基本的算数运算
代码举例:
#!/bin//bash
a=99
b=88
echo "$[a*b]"
#输出:187
- 关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true | [ $a -eq $b ] |
-ne | 检测两个数是否不相等,不相等返回 true | [ $a -ne $b ] |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true | [ $a -gt $b ] |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true | [ $a -lt $b ] |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true | [ $a -ge $b ] |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true | [ $a -le $b ] |
代码举例:
#!/bin/bash
if [ ${1} -eq ${2} ]
then
echo "相等"
fi
if [ ${1} -ne ${2} ]
then
echo "不相等"
fi
if [ ${3} -gt ${4} ]
then
echo "大于"
fi
if [ ${3} -lt ${4} ]
then
echo "小于"
fi
if [ ${5} -ge ${6} ]
then
echo "大于等于"
fi
if [ ${5} -le ${6} ]
then
echo "小于等于"
fi
输出:
cjs@cjs:~$ ./a.sh 10 20 30 25 99 199
不相等
大于
小于等于
注意:
记忆:
① -eq :相等,equal英文,取前两个字母;
② -ne :不相等,not-equal,速记;
③ -gt : 大于,greater than,gt速记;
④ -lt : 小于,less than,lt速记;
⑤ -ge :大于等于,gt+eq=ge,速记;
⑥ -le :小于等于,lt+eq=le,速记;
- 布尔运算符
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true | [ ! false ] 返回 true |
-o | 或运算,有一个表达式为 true 则返回 true | |
-a | 与运算,两个表达式都为 true 才返回 true |
代码举例:
#!/bin/bash
if [ !${1} ]
then
echo "非0的结果为:ture"
fi
if [ ${2} -ge 100 -o ${3} -le 100 ]
then
echo "参数2大于等于100或参数3小于等于100"
else
echo "参数2大于等于100或参数3小于等于100:不成立"
fi
if [ ${2} -gt 100 -a ${3} -lt 100 ]
then
echo "参数2大于等于100且参数3小于等于100"
else
echo "参数2大于等于100且参数3小于等于100:不成立"
fi
输出:
cjs@cjs:~$ ./a.sh 0 199 99
非0的结果为:ture
参数2大于等于100或参数3小于等于100
参数2大于等于100且参数3小于等于100
记忆:
①非:!,同C语言
②或:or,故为 -o
③与:and,故为 -a
- 逻辑运算符
运算符 | 说明 |
---|---|
&& | 逻辑的 AND |
|| | 逻辑的 OR |
代码类似布尔运算符。
注:& 不管前面的条件是否正确,后面都执行。
&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好。
- 字符串运算符
运算符 | 说明 |
---|---|
= 【注意不是==】 | 检测两个字符串是否相等,相等返回 true |
!= | 检测两个字符串是否相等,不相等返回 true |
-z | 检测字符串长度是否为0,为0返回 true |
-n | 检测字符串长度是否不为 0,不为 0 返回 true |
$ | 检测字符串是否为空,不为空返回 true |
代码举例:
#!/bin/bash
if [ ${1} = ${2} ] #判断两个字符串相同,用=,而不是==,但是不等仍为!=
then
echo "字符1等于字符2"
else
echo "字符1不等于字符2"
fi
if [ -z ${1} ]
then
echo "字符串1长度为0"
else
echo "字符串1长度不为0"
fi
if [ -n ${1} ]
then
echo "字符串1长度不为0"
else
echo "字符串1长度为0"
fi
if [ ${1} ] #注意下,这个直接传入字符串即可
then
echo "字符串1不为空"
else
echo "字符串1为空"
fi
输出:
cjs@cjs:~$ ./a.sh abc qwe
字符1不等于字符2
字符串1长度不为0
字符串1长度不为0
字符串1不为空
- 文件测试运算符
操作符 | 说明 |
---|---|
-b | 检测文件是否是块设备文件 |
-c | 检测文件是否是字符设备文件 |
操作符 | 说明 |
---|---|
-d | 检测文件是否是目录 |
-f | 检测文件是否是普通文件(既不是目录,也不是设备文件) |
操作符 | 说明 |
---|---|
-r | 检测文件是否可读 |
-w | 检测文件是否可写 |
-x | 检测文件是否可执行 |
-s | 检测文件是否为空(文件大小是否大于0) |
-e | 检测文件(包括目录)是否存在 |
操作符 | 说明 |
---|---|
-g | 检测文件是否设置了 SGID 位 |
-u | 检测文件是否设置了 SUID 位 |
-k | 检测文件是否设置了粘着位(Sticky Bit) |
-p | 检测文件是否是有名管道 |