玩转Bash脚本:test测试语句

运维 系统运维
整数的test就是大小关系的比较,与其他语言不同,Bash中没有使用<,>来做大于等于号,而是使用了减号开头的选项来比较……

总第1篇

test

test就是测试的意思,常用在流程控制语句中作为条件。下面做一下介绍。

测试整数

整数的test就是大小关系的比较,与其他语言不同,Bash中没有使用<,>来做大于等于号,而是使用了减号开头的选项来比较。

假如有两个整数变量a和b。那么比较a是否大于b,就写作 test $a -gt $b ,符合条件返回真值1。实际在终端里测试的时候可以这样写来看test语句的执行结果

  1. test $a -gt $ $b && echo “Yes”   

如果条件成立打印 Yes,不成立不打印。

全部的关系比较选项为:

选项 描述 英文全称
eq 等于 equal
gt 大于 greater than
lt 小于 less than
ne 不等于 not equal
ge 大于等于 greater or equal
le 小于等于 less or equal

Bash脚本,或者说Shell终端中的各种命令都有很丰富的选项,所以我建议在记忆的时候要去记忆它的英文全称,理解了它的含义,这样反而会降低记忆的难度。

测试字符串

字符串的测试无非就是包括,判断两个字符串是否相等,判断一个字符串是否为空。

假设str1和str2是持有两个字符串的变量(直接测试两个字符串,而非字符串变量时,则不加$,这很好理解)。具体用法为:

test $str1 = $str2 测试是否相等,相等返回1
test $str1 != $str2 测试是否不等,不等返回1
test $str1 \< $str2 如果str1的字典序在str2之前,则返回1
test $str1 \> $str2 如果str1的字典序在str2之后,则返回1
test $str1 如果不为空返回1
test -n $str1 如果不为空返回1
test -z $str1 如果是空串,返回1

关于字典序的那两个比较,其实就是大于号 > 和小于号 <。因为bash中这两个符号有重定向的意思,所以这里要使用反斜杠\ 转义。

选项-n是 nonzero 的缩写。选项-z是 zero 的缩写。这样好记忆了吧

测试文件

测试文件需要用到大量的选项,这里我只写一个常用的,其他的大家自行 man test

针对单个文件
 

选项

描述
d 是否为目录
f 是否为普通文件
x 是否有执行权限
r 是否有读权限
w 是否写读权限
e 是否存在
s 文件大小是否大于0
c 是否为字符设备文件
b 是否为块设备文件

以上条件在成立的时候返回真值1。具体用法比如:

  1. 01.test -f hello.c    
  2. 02.test -d /home    
  3. 03....    

针对两个文件

用法 描述
test file1 -nt file2 测试file1的修改时间是不是比file2 new(晚)
test file1 -ot file2 测试file1的修改时间是不是比file2 old(早)
test file1 -ef file2 测试两者是相同的设备和具有相同的结点(inode)数

同样的,若是条件成立则返回真值1。注意这里的file1,file2就是文件名的字符串了。

  1. 01.#可以直接    
  2. 02.test a.c -nt b.c    
  3. 03.#或者是    
  4. 04.a=a.c    
  5. 05.b=b.c    
  6. 06.test $a -nt $b    

不再细表。

逻辑运算

逻辑运算就是与或非。

  • -a 逻辑与
  • -o 逻辑或
  • ! 逻辑非

用法如:

  1. 01.test $a -lt $b -a $a -gt $c    
  2. 02.test $a -lt $b -o $a -gt $c    
  3. 03.test ! -d sleep.sh && echo Yes #如果sleep.sh不是目录,就打印Yes   

其实完整版是这样:

  1. 01.test $a -lt $b -a test $a -gt $c    
  2. 02.test $a -lt $b -o test $a -gt $c     

简化版test

在读完这一部分后,你可能会惊呼,怎么不早点告诉我。哈哈。

其实以上所有的test命令都可以用方括号替换。比如

test -f hello.c

可以换成

[ -f hello.c ]

怎么样,很方便吧。注意的是,方括号和表达式前后各有一个空格间隔哦。不要丢掉。实际也就是 [空格-f hello.c空格]

其他注意的地方是方括号的逻辑表达式,比如

test $a -lt $b -a $a -gt $c

可以转化为

[ $a -lt $b -a $a -lt $c ]

或者分开作为两条语句

[ $a -lt $b -a ]&&[ $a -lt $c ]

这个&&并无什么特别之处,并非方括号运算所独有。此处就是当前面语句为真时,接着执行后面的语句。所有的Bash语句都可以用&&或||连接。

原文链接:http://blog.csdn.net/guodongxiaren/article/details/38014669

责任编辑:牛小雨 来源: Jelly先生的博客
相关推荐

2022-11-23 08:14:42

bash 脚本test 命令

2020-09-11 16:00:40

Bash单元测试

2021-03-11 21:30:43

BATSBash软件开发

2022-03-30 09:32:32

BashtestLinux

2019-06-17 08:00:55

multipassbash脚本

2023-08-23 12:12:45

BashLinux

2022-05-30 10:31:34

Bash脚本Linux

2010-01-20 10:40:44

C++Test

2021-09-14 13:00:17

nodejsbash前端

2021-08-30 12:45:37

nodejsbash前端

2022-12-01 08:10:49

Bash脚本参数

2013-05-27 13:37:06

2021-08-11 08:00:00

脚本测试开发

2022-12-09 07:58:52

Bash条件语句

2021-12-30 10:26:37

Bash Shell脚本文件命令

2017-04-13 10:51:17

Bash建议

2021-02-01 11:01:18

Bash脚本Linux

2022-01-20 16:43:38

Bash 脚本ShellLinux

2022-02-28 11:02:53

函数Bash Shell语句

2020-10-13 19:04:58

Bash信号捕获Shell脚本
点赞
收藏

51CTO技术栈公众号