一.算术运算符
vim test.sh
#!/bin/bash
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a == b"
fi
if [ $a != $b ]
then
echo "a != b"
fi
运行:
bash test.sh
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a != b
原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
注意使用的反引号(esc 键下边)
表达式和运算符之间要有空格 $a + $b 写成 $a+$b 不行
条件表达式要放在方括号之间,并且要有空格 [ $a == $b ] 写成 [$a==$b] 不行
乘号(*)前边必须加反斜杠(\)才能实现乘法运算
二.关系运算符
- -eq
- 含义:等于(Equal)
- 示例:
if [ $a -eq $b ]; then echo "a等于b"; fi
,当$a
的值等于$b
的值时,条件为真,执行echo
语句。- -ne
- 含义:不等于(Not Equal)
- 示例:
if [ $a -ne $b ]; then echo "a不等于b"; fi
,当$a
的值不等于$b
的值时,条件为真。- -lt
- 含义:小于(Less Than)
- 示例:
if [ $a -lt $b ]; then echo "a小于b"; fi
,当$a
的值小于$b
的值时,条件为真。- -le
- 含义:小于等于(Less Than or Equal)
- 示例:
if [ $a -le $b ]; then echo "a小于等于b"; fi
,当$a
的值小于或等于$b
的值时,条件为真。- -gt
- 含义:大于(Greater Than)
- 示例:
if [ $a -gt $b ]; then echo "a大于b"; fi
,当$a
的值大于$b
的值时,条件为真。- -ge
- 含义:大于等于(Greater Than or Equal)
- 示例:
if [ $a -ge $b ]; then echo "a大于等于b"; fi
,当$a
的值大于或等于$b
的值时,条件为真。
vim test2.sh
#!/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
bash test2.sh
10 -eq 20: a != b
三.逻辑运算符
1. “&&”(与运算符)
功能:当使用 “&&” 连接两个命令或条件表达式时,只有当左边的命令或条件为真时,才会执行右边的命令或检查右边的条件。如果左边为假,则右边的操作不会执行,整个表达式的值为假。
示例:
command1 && command2:先执行command1,如果command1执行成功(返回值为 0,在 Bash 中表示真),则接着执行command2;如果command1失败(返回非 0 值),则command2不会执行。
[ $a -gt 10 ] && [ $b -lt 20 ]:当变量$a的值大于 10 并且变量$b的值小于 20 时,整个表达式为真。
2. “||”(或运算符)
功能:当使用 “||” 连接两个命令或条件表达式时,如果左边的命令或条件为假,则会执行右边的命令或检查右边的条件。只要左边或右边其中一个为真,整个表达式的值就为真。
示例:
command1 || command2:先执行command1,如果command1失败(返回非 0 值),则接着执行command2;如果command1成功(返回值为 0),则command2不会执行。
[ $a -eq 5 ] || [ $a -eq 10 ]:当变量$a的值等于 5 或者等于 10 时,整个表达式为真。
四.字符串运算符
= 检测两个字符串是否相等,相等就返回true
!= 检测两个字符串是否相等,不相等就返回true
-z 检测两个字符串长度是否为0,为0就返回true
-n 检测两个字符串长度是否为0,不为0就返回true
str 检测字符串是否为空,不为空返回true
#!/bin/bash
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a == b"
else
echo "$a = $b: a != b"
fi
if [ -n $a ]
then
echo "-n $a : The string length is not 0"
else
echo "-n $a : The string length is 0"
fi
if [ $a ]
then
echo "$a : The string is not empty"
else
echo "$a : The string is empty"
fi
结果:
abc = efg: a != b
-n abc : The string length is not 0
abc : The string is not empty
五.文件测试运算符
#!/bin/bash
file="/home/shiyanlou/test.sh"
if [ -r $file ]
then
echo "The file is readable"
else
echo "The file is not readable"
fi
if [ -e $file ]
then
echo "File exists"
else
echo "File not exists"
fi
结果:
The file is readable
File exists