Shell编程入门,运算符的介绍与使用

运算符

在shell编程中的所使用的运算符与其他编程环境中采用的运算符,基本一致。主要有:算数运算符、关系运算符、布尔运算符。在shell编程中,我们大多数时间都在和Linux系统进行指令的交互,为了提高开发效率,方便开发者使用,又扩展了两类运算符类别,它们分别是:字符串运算符、文件测试运算符。下面,我们就来认识一下这些运算符,并如何使用它们!

  • 算术运算符
    在进行算术运算时,我们涉及到表达式的书写问题。shell中不支持原生的算术表达式书写来计算,所以它为我们提供了expr与$((表达式)) 两种方式。两者也略有不同。

    使用时,应该注意以下问题:
    (1)在运算符的左右两边都需要空格,例如,1+1的正确写法为:expr 1 + 1或者$((1 + 1))
    (2)采用expr书写的完成表达式,一般采用反引号 ` 包含起来,表示为一个表达式。例如:`expr 1 + 1`
    (3)对于下面提到的乘法运算,在expr 表达式和$((表达式))是略有区别的,在expr中使用乘法则需要将乘法运算符号进行转义 (\*),例如:expr 2 \* 2;$((表达式))则不需要转义(*),例如:$((2 * 2))
    常见算术运算符号如下表所示,设定两个变量:a=7,b=4。

    运算符描述示例(两种写法)
    +加法运算符(1) `expr $a + $b`;(2)$(( $a + $b)),
    -减法运算符(1) `expr $a - $b`;(2)$(( $a - $b)),
    *乘法运算符(1) `expr $a \* $b`;(2)$(( $a * $b)),
    /除法运算符(1) `expr $a / $b`;(2)$(( $a / $b)),
    %取余预算符(1) `expr $a % $b`;(2)$(( $a % $b)),
    =赋值运算符a=$b,将b的值赋给a
    ==相等运算符,用于两数字比较,相等则返回true[ $a == $b ],结果为false。
    !=不相等运算符,用于两数字比较,不相等则返回true[ $a != $b ],结果为true。
  • 关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。被用于比较数字之间的大于、小于、等于之间的关系。
    常见的关系运算符如下表所示,设定两个变量a=10,b=8

    运算符描述示例
    -eq等于(equal)[ $a -eq $b ],返回false
    -ne不等于(not equal)[ $a -ne $b ],返回true
    -gt大于(grate than)[ $a -gt $b ],返回true
    -lt小于(little than)[ $a -lt $b ],返回false
    -ge大于等于(great equal)[ $a -ge $b ],返回true
    -le小于等于(little equal)[ $a -le $b ],返回false

    注意:此处的判断表达式“[ 表达式 ]”内部两侧必须有空格。

  • 布尔运算符
    布尔运算符用在布尔表达式中,进行特定的逻辑运算。
    常见的布尔预算符如下表所示,定义两个变量:a=10,b=20

    运算符描述用例
    !非运算(not)(可看做为取反)[ ! false ],返回true
    -o(||)或运算,(or)[ $a -ne $b -o $a -gt $b ],返回true
    -a (&&)与运算(and)[ $a -eq $b -o $a -lt $b ],返回false

    这里需要注意的是,在多判断表达式中使用或运算和与运算的时候,1)对于或运算只要第一个表达式为true,即为true,不做后续判断;2)对于或运算只要第一个表达式为false,即为false,不做后续判断;

  • 字符串运算符
    在shell编程中,很多情况下在使用字符串前,我们需要进行一些简单的判断操作。为了方便开发,因此就诞生了有关字符串的运算符。
    常见的字符串运算符下表所示,定义两个变量a=“qwe”,b=“sdf”

    运算符描述示例
    =比较两个字符串是否相等[ $a = $b ],返回false
    !=比较两个字符串是否不相等[ $a != $b ],返回true
    -z检测字符串长度是否为0(zero)[ -z $b ],返回false
    -n检测字符串长度是否不为0(不为null)[ -n $a ],返回true
    $检测字符串是否为空,不为空返回true[ $a ],返回true

    对表中的 $ 运算,就想我们 $a 返回的是 a 的具体数值,有数据返回即为true,无数据返回即为false。所谓判断条件基本也是这样处理的。

  • 文件测试运算符
    学习过Linux的我们,应该都知道,在Linux的世界里一切皆文件,包括硬件设备信息等都是文件以文件的形式存在于Linux系统中。所以呢,在进行Shell编程的时候,就自然诞生了有关文件的运算符号,方便我们对文件的操作。
    常用的文件测试运算符如下表所示。定义文件变量:file="/home/mongo/test.sh",大小为100字节,具有rwx权限。

    运算符描述示例
    -b检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
    -c检测文件是否是字符设备文件,如果是,则返回 true。[ -c $file ] 返回 false。
    -d检测文件是否是目录,如果是,则返回 true。[ -d $file ] 返回 false。
    -f检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ] 返回 true。
    -g检测文件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ] 返回 false。
    -k检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。[ -k $file ] 返回 false。
    -p检测文件是否是有名管道,如果是,则返回 true。[ -p $file ] 返回 false。
    -u检测文件是否设置了 SUID 位,如果是,则返回 true。[ -u $file ] 返回 false。
    -r检测文件是否可读,如果是,则返回 true。[ -r $file ] 返回 true。
    -w检测文件是否可写,如果是,则返回 true。[ -w $file ] 返回 true。
    -x检测文件是否可执行,如果是,则返回 true。[ -x $file ] 返回 true。
    -s检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ] 返回 true。
    -e检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true。

    附加测试符号:

    • -S: 判断某文件是否 socket。
    • -L: 检测文件是否存在并且是一个符号链接。

    记录学习,记录成长!如果有帮到您,还请动动您的小手给个赞喏~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值