Shell 脚本的条件测试与比较
Shell 巩固和复习系列笔记,立个 Flag,之后不定时更新相关工作上可能遇到的 Shell 应用场景。
文章目录
1. Shell脚本的条件测试
在 bash 各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结果执行不同的操作,有时也会与if等条件语句相结合,来完成测试判断,以减少程序运行的错误。
执行条件测试表达后通常会返回“真”或“假”,就像执行命令后的返回值为 0 表示真,非 0 表示假一样。
条件测试常用语法
条件测试语法 | 说明 |
---|---|
语法1:test <测试表达式> | 利用 test 命令进行条件测试表达式的方法,test 与表达式至少隔一个空格 |
语法2:[ <测试表达式> ] | 通过[](单括号)进行条件测试表达式的方法,与 test 命令用法相同,边界与表达式至少隔一个空格 |
语法3:[[ <测试表达式> ]] | 通过[[]](双中括号)进行条件测试表达式的方法,边界与表达式至少隔一个空格 |
语法4:((<测试表达式>)) | 通过(())(双小括号)进行条件测试表达式的方法,一般用于if语句,(())与表达式不需要留空格 |
说明:
- 语法1中的 test 命令和语法 2 中的[]等价,[[]]为扩展的 test 命令,(()) 常用于算数运算
- [[]](双中括号)可以使用通配符进行模式匹配,区别于其他语法模式
&&
、||
、!
、>
、<
等操作符可以用于 [[]] 中,但不能应用于 [] 中,在 [] 中一般用-a
、-o
、-gt(整数)
、-lt(整数)
等命令行参数代替操作符- 整数的关系运算,也可以使用 Shell 的算数运算符 (())
1.1 test条件测试
test
等价于[]
,三个基本作用就是判断文件、字符串、整数。支持使用与或非
将表达式连接起来
test 中可用的比较运算符只有 ==
和 !=
,两者都用于字符串比较的,不可用于整数比较,整数比较只能使用-eq
、-gt
这种参数形式,如需要使用大于>
或小于<
进行字符串的比较,必须加上转义符号如[ ab \< bc ]
[root@aurora study]# test -f test.txt && echo true || echo false
true
如果 test.txt
文件存在,输出 true,否则输出 false,-f 判断是否为普通文件
test -z “tuzaza” && echo 1 || echo 0
如果测试字符串的长度为 0 则输出 1,否则输出 0,-z
判断字符串的长度是否为 0
Tips:关于 test 测试表达式的更多知识可以执行man test
查看帮助
1.2 [](中括号)条件测试
[ -f /home/study/test.txt ] && echo 1 || echo 0
如果 /home/study/test.txt
文件存在,则输出 1,否则输出 0
1.3 [[]](双中括号)条件测试
[[]]
支持字符串的模式匹配,使用=
、~
等操作符支持 Shell 的正则表达式