bash 之 test 表达式基础

简介: bash 之 test 表达式基础

大家会bash test肯定会感觉到很陌生吧,但是你一定见过在shell中,使用这类语法:

if [ -f $xxx ];then 
... 
fi


其中[ -f $xxx ]就是test表达式的一种方式之一,也是使用的最多的之一



什么是test表达式


test是大名鼎鼎的GNU软件之一,为Linux的内置命令,表达式在shell中是用于检查文件状态检查、字符串运算 和 数值比较 的表达式


test返回状态值含义


  • 0: 表达式结果为真(true)
  • 1: 表达式结果为假(false)
  • 2: 程序出错(error)



我们来看下返回值

image.png


我们可以发现,当表达式为true的时候,返回值为0,当表达式为false的时候,返回值为1,当表达式出现错误的时候,返回值为2


test表达式可以简写为[ ](小括号的形式)形式,关于这点,是shell比较弄混淆的一个点

我举例讲下

test a = b

等同于

[ a = b ]

[]格式如下

image.png


空格是不能省略的哦

脚本如下图

image.png


执行结果如下

image.png


前面介绍的差不多了,那我们开始看看test表达式了?




数值计算


test表达式中没有><``=``!=这类符号(至少在sh中没有)

那我们怎么进行数值计算呢,test表达式给我们了一系列操作符

具体我们来看下

操作符 含义
-nq 等于
-ne 不等于
-ge 大于或等于
gt 大于
-le 小于或等于
-lt 小于


我们来尝试下

image.png


我们使用debug运行一下并且查看结果

image.png


你是否感觉到苦恼,实在是记不住eqne等应该怎么办

哎,不要急,bash提供了新的特性,可以使用[[ ]]来包含表达式,该表达式就可以写=!=等,我们来尝试下

image.png


我们运行一下脚本,查看一下结果

image.png

注意: ****这个特性是指的是bash,而使用sh则会出错

我们使用一下sh执行一下,查看一下报错

image.png


字符串比较


对于字符串比较,test给我们提供的方法有 比较2个字符串是否相等比较2个字符串是否不相等判断字符是否为空判断字符串是否非空

操作符 含义
str1 = str2 str1 等于 str2
str1 != str2 str1 不等于 str2
-z str1 str1 为空
-n str1 str1 不为空


好的,我们从案例中来看看具体含义

image.png

我们执行脚本来看下具体输出

image.png




文件/属性比较


test不仅只有 数值判断 和 字符串判断 ,更为强大的是,它还具有文件判断功能

由于判断类型比较多,所以,就只放常用的就行了


文件判断

操作符 含义
-e 文件是否存在
-f 文件存在且为 文件
-d 文件存在且为 目录


我们看一个例子

我们新建目录 pdudo_jujin_test并且做3个判断,我们使用test来写表达式

image.png


属性判断

操作符 含义
-r 该文件是否有 读 权限
-w 该文件是否有 写 权限
-x 该文件是否有 执行 权限
-s 该文件是否为非空

我们来看一个例子,我们新建一个空文件: juejin_pdudo_files,并且来判断属性,我们使用[]来写表达式


image.png



总结


我们总结了比较简单的使用,还有一些,我们作为高级特性来呈现,结合自身学习来看的话,一次性学习的太多,很容易弄混淆。


我们在进行数字比较的时候,若不想使用 -eq等表达式,可以尝试下使用bash特性,使用 [[ ]]包含表达式,例如: =!=><等,但是作为一般运维人员,使用[[ ]]是会被人耻笑的,且程序健壮性不强(bash特性,切换至其他sh脚本有可能会失败),所以几乎尽量不使用[[]]包含表达式。

之所以test强大,是因为可以检测文件/属性判断,所以一直依赖,它都将是我们运维的利器,基础我们了解了,后期我们可以看看test表达式,适用于哪些脚本,将会如何呈现出来。















相关文章
|
运维 Shell Linux
bash之test表达式基础-2
bash之test表达式基础-2
79 0
|
Shell 分布式数据库
|
Shell Windows 分布式数据库
bash if 表达式含义
[ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
610 0
|
5月前
|
监控 安全 Shell
防止员工泄密的措施:在Linux环境下使用Bash脚本实现日志监控
在Linux环境下,为防止员工泄密,本文提出使用Bash脚本进行日志监控。脚本会定期检查系统日志文件,搜索敏感关键词(如&quot;password&quot;、&quot;confidential&quot;、&quot;secret&quot;),并将匹配项记录到临时日志文件。当检测到可疑活动时,脚本通过curl自动将数据POST到公司内部网站进行分析处理,增强信息安全防护。
170 0
|
5月前
|
Linux Shell Windows
4:Bash shell命令-步入Linux的现代方法
4:Bash shell命令-步入Linux的现代方法
91 0
|
Ubuntu 安全 Linux
不用安装虚拟机,直接在Windows上面运行Linux Bash Shell,嗯!真香!!!
不用安装虚拟机,直接在Windows上面运行Linux Bash Shell,嗯!真香!!!
249 0
|
关系型数据库 MySQL Shell
【Linux命令】-bash: mysql: command not found
【Linux命令】-bash: mysql: command not found
130 0
|
5月前
|
存储 Shell Linux
Linux Bash 脚本中的 IFS 是什么?
【4月更文挑战第25天】
115 0
Linux Bash 脚本中的 IFS 是什么?
|
3月前
|
存储 Shell Linux
Linux|创建和使用 Bash 别名
Linux|创建和使用 Bash 别名
44 6
|
5月前
|
Java Shell Linux
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?