Shell学习06:运算符汇总

数学运算

原生bash不支持直接的数学运算

# 若直接执行以下脚本
#! /bin/bash

var=$(3 + 4)
echo "两数之和为${var}"

# 执行脚本,得到下面报错信息
command not found

虽然不支持直接的数学运算,但是可以通过命令来实现数学运算。通常使用expr 命令来进行数学运算,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

# 执行以下脚本
#! /bin/bash

var=$(expr 3 + 4)
echo "两数之和为${var}"

# 执行脚本,得到以下结果
两数之和为 : 7

需要注意的是:

  • 表达式和运算符之间要有空格,例如 3+4 是不对的,得出来的结果是“两数之和为 : 3+4”必须写成 3 + 4才能得到正确的运算结果;
  • 表达式要被$() 或者 (反引号)包含,表示执行这一运算操作。

算术运算符

与我们平时使用的运算符相同

  • 加法 +
  • 减法 -
  • 乘法 *
  • 除法 /
  • 取余 %
  • 赋值 =
  • 相等 ==
  • 不相等 !=

使用算术运算符时也需要注意以下几点:

  • 条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ];
  • 乘号(*)前边必须加反斜杠(\ )才能实现乘法运算,[ 4 \ * 5 ];

关系运算符

重点来啦

运算符作用
-eq判断两个数是否相等,相等返回 true
-ne判断两个数是否不相等,不相等返回 true
-gt判断左边的数是否大于右边的,如果是,则返回 true
-lt判断左边的数是否小于右边的,如果是,则返回 true
-ge判断左边的数是否大于等于右边的,如果是,则返回 true
-le判断左边的数是否小于等于右边的,如果是,则返回 true

注意,以上关系运算符只支持数字或者值为数字的字符串,不支持除了值为数字以外的字符串。

布尔运算符

运算符作用
非运算,表达式为 true 则返回 false,否则返回 true
-o或运算,有一个表达式为 true 则返回 true
-a与运算,两个表达式都为 true 才返回 true

实例:

#! /bin/bash

value1=0
value2=5
value3=10

if [ ! ${value1} ]
then
    echo "! 起作用啦"
else
    echo "! 没有起作用"
fi

if [ ${value2} -o ${value1} ]
then
    echo "${value1} 或 ${value2} 为真"
else
    echo "${value1} 或 ${value2} 为假"
fi

if [ ${value1} -a ${value2} ]
then
    echo "${value1} 与 ${value2} 为真"
else
    echo "${value1} 与 ${value2} 为假"
fi

if [ ${value1} -a ${value3} == ${value2} ]
then
    echo "${value1} 与 ${value3} 为真"
else
    echo "${value1} 与 ${value3} 为假"
fi


# 结果为
! 没有起作用
0 或 5 为真
0 与 5 为真
0 与 10 为假

从结果可以看出,这与我们平时 ! 运算的要求不大一样,平时编程时 !0 即为真,但在shell里,0 为字符串,真实存在的即为真,所以 !0 为假。因此只有通过其他运算符判断为假的表达式和!共用才能整体判断为真。如if [ ${value1} -a ${value3} == ${value2} ]例子所示。

字符串运算符

运算符作用
=判断两个字符串是否相等,相等返回 true
!=判断两个字符串是否相等,不相等返回 true
-z(zero)判断字符串长度是否为0,为0返回 true
-n判断字符串长度是否为0,不为0返回 true
$判断字符串是否为空,不为空返回 true

与上面布尔运算符不同,字符串运算符的两边为字符串,布尔运算符的两边为判断结果为true 或 false 的布尔变量。

逻辑运算符

与Java相同,&& 表示 逻辑与,|| 表示逻辑或

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值