Linux中shell运算符详解

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

猜你喜欢

转载自blog.csdn.net/yuki5233/article/details/81166509