本文旨在复习Shell脚本编程中的条件测试和5种基本运算符

知识储备


  • Bash支持众多运算符,算数、关系、布尔、字符串、文件测试运算符

  • 而这些运算符中打印结果为0或1的,即结果为布尔型的运算都可以作为条件测试Expression

  • 原生Bash不支持简单的数学运算,只能通过别的方式得到 参考Shell系列6—取算数运算数值


什么是条件测试?


条件测试,即对于给定的某种条件或某几种条件判断真假,并给出返回值

若测试条件为真,则返回一个0值;如果测试条件为假,将返回一个非0整数值。

依据返回值,shell脚本可有选择地执行某些片段,最常见的是If的条件表达式、while的循环条件等

[9-13]Shell系列5——条件测试和运算符_第1张图片

测试命令可文件测试、整数测试、字符串测试等,本质是对不同运算符运算结果真假判断,即Expression

测试命令1.2.3基本效果相同,但是[[  ]]是关键字,其他是built内建命令

命令 和 关键字的差别有多大呢? 

    如果是命令,它把参数作为比较表达式或文件测试,并且根据比较结果,返回一个退出码。那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。关键字把整个表达式看作一个单独的元素,并且返回一个退出码。[[]]结构比[]更灵活,是一个扩展的test命令。


算数运算符


注意点:

 <1>注意:Bash原生不支持算术运算的,需要使用别的办法来获取算数运算值 参考shell系列6

 <2>输出结果可以是数值,也可以是0/1这样的布尔型,因此也可以作为条件测试的 Expression

 <3>如果是做条件测试,那么需要以这样的形式来写[ Experssion ] 左右两侧有空格!

[9-13]Shell系列5——条件测试和运算符_第2张图片

关系运算符


关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

输出结果是布尔型,因此可以作为条件测试的 Expression

[9-13]Shell系列5——条件测试和运算符_第3张图片


布尔运算符


布尔运算符运算结果本来就是布尔型,显然可以作为条件测试的 Expression

[9-13]Shell系列5——条件测试和运算符_第4张图片

字符串运算符


字符串运算符能比较string、是否为空等,结果也是布尔型,也可做条件测试 Expression

[9-13]Shell系列5——条件测试和运算符_第5张图片

补充字符串其实也是可以比较大小,本质是对应ASCII数值大小的比较,用法如下   

1
2
3
4
5
6
7
8
9
10


#!/bin/bash
# "A" > "B":是否大于; -->这里直接用的字符串A
# "A" < "B":是否小于; -->还可以使用$Var_Name[变量中存放字符串]
# 字符串比较大小 应该使用[[ Expression ]] 

if [[ "A" > "B" ]];then
    echo 
"yes"
else
    echo 
"no"
fi

wKioL1YAK6GASJKxAANCmC1RHRk035.bmp


文件测试运算符


文件测试运算符用于检测 Unix 文件的各种属性。结果为布尔型,也可做条件测试 Expression