sell 脚本-运算符
算术运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
完整的表达式要被 `` 包含,注意这个字符不是常用的单引号。
*
加法
echo "加法: `expr 1 + 2 + 3`"
# 或给变量赋值
sum=`expr 1 + 2 + 3`
echo "sum 值为: $sum"
减法
echo "减法: `expr 1 - 2 - 3`"
乘法
echo "乘法: `expr 1 \* 2 \* 3`"
除法
echo "除法: `expr 6 / 3 / 2`"
取余
echo "取余: `expr 5 % 3`"
等于或不等于
比较两个数字是否相等或不相等,返回布尔值
num1=1
num2=2
if [ $num1 == $num2 ]
then
echo "num1 等于 num2"
fi
if [ $num1 != $num2 ]
then
echo "num1 不等于 num2"
fi
num3=20
num4=20
if [ $num3 == $num4 ]
then
echo "num3 等于 num4"
fi
if [ $num3 != $num4 ]
then
echo "num3 不等于 num4"
fi
注意: [
和 ]
符号和判断条件中间要有空格
执行结果:
num1 不等于 num2
num3 等于 num4
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
关系运算符有:-eq, -ne, -gt, -lt, -ge, -le
-eq: 检测两个数是否相等
num5=5
num6=6
if [ $num5 -eq $num6 ]
then
echo "$num5 -eq $num6 结果: num5 等于 num6"
else
echo "$num5 -eq $num6 结果: num5 不等于 num6"
fi
-ne: 检测两个数是否不相等
if [ $num5 -ne $num6 ]
then
echo "$num5 -ne $num6 结果: num5 不等于 num6"
else
echo "$num5 -ne $num6 结果: num5 等于 num6"
fi
-gt: 检测左边的数是否大于右边的
if [ $num5 -gt $num6 ]
then
echo "$num5 -gt $num6 结果: num5 大于 num6"
else
echo "$num5 -gt $num6 结果: num5 不大于 num6"
fi
-lt: 检测左边的数是否小于右边的
if [ $num5 -lt $num6 ]
then
echo "$num5 -lt $num6 结果: num5 小于 num6"
else
echo "$num5 -lt $num6 结果: num5 不小于 num6"
fi
-ge: 检测左边的数是否大于等于右边的
if [ $num5 -ge $num6 ]
then
echo "$num5 -ge $num6 结果: num5 大于等于 num6"
else
echo "$num5 -ge $num6 结果: num5 小于 num6"
fi
-le: 检测左边的数是否小于等于右边的
if [ $num5 -le $num6 ]
then
echo "$num5 -le $num6 结果: num5 小于等于 num6"
else
echo "$num5 -le $num6 结果: num5 大于 num6"
fi
布尔运算符
布尔运算符包括非运算,或运算,与运算,对应的运算符为!, -o, -a
非运算
参考上面的 !=
或运算
多个表达式中,有一个表达式为 true
,则返回 true
num7=7
num8=8
if [ $num7 == $num8 -o $num7 != $num8 ]
then
echo "$num7 == $num8 -o $num7 != $num8 结果: true"
else
echo "$num7 == $num8 -o $num7 != $num8 结果: false"
fi
运行结果:
7 == 8 -o 7 != 8 结果: true
与运算
多个表达式中,所有表达式为 true
,则返回 true
if [ $num7 == $num8 -a $num7 != $num8 ]
then
echo "$num7 == $num8 -a $num7 != $num8 结果: true"
else
echo "$num7 == $num8 -a $num7 != $num8 结果: false"
fi
运行结果:
7 == 8 -a 7 != 8 结果: false
逻辑运算符
逻辑运算符有 AND &&
和 OR ||
AND
两个条件都为 true
则返回 true
, 类似上面的 -a
num9=9
num10=10
if [[ $num9 == 100 && $num10 != 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
运行结果:
返回 false
OR
两个条件一个为 true
则返回 true
, 类似上面的 -o
num9=9
num10=10
if [[ $num9 == 100 && $num10 != 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
运行结果:
返回 true
字符串运算符
相等
使用 =
可以判断字符串是否相等,使用 !=
判断是否不相等
str1="hello"
str2="word"
if [ $str1 = $str2 ]
then
echo "$str1 等于 $str2"
else
echo "$str1 不等于 $str2"
fi
if [ $str1 != $str2 ]
then
echo "$str1 不等于 $str2"
else
echo "$str1 等于 $str2"
fi
运行结果:
hello 不等于 world
hello 不等于 world
判断字符串长度是否为0
使用 -z
若字符串长度为0时,返回 true
使用 -n
若字符串长度不为0时,返回 true
empty_str=""
# -z
if [ -z $empty_str ]
then
echo "字符串“${empty_str}”长度为0"
else
echo "字符串“${empty_str}”长度不为0"
fi
if [ -z $str1 ]
then
echo "字符串“${str1}”长度为0"
else
echo "字符串“${str1}”长度不为0"
fi
# -n
if [ -n "$empty_str" ]
then
echo "字符串“${empty_str}”长度不为0"
else
echo "字符串“${empty_str}”长度为0"
fi
if [ -n "$str1" ]
then
echo "字符串“${str1}”长度不为0"
else
echo "字符串“${str1}”长度为0"
fi
运行结果:
字符串“”长度为0
字符串“hello”长度不为0
字符串“”长度为0
字符串“hello”长度不为0