一、shell的条件测试语句
在写shell脚本时,经常遇到的问题就是判断字符串是否相等,可能还要检查文件状态或进
行数字测试,只有这些测试完成才能做下一步动作。
1.1、shell脚本中的条件测试如下:
1、文件测试
2、字符串测试
3、数字测试
4、复测试
测试语句一般与后面讲的条件语句联合使用
1.2、test命令
test的命令分为两种格式
第一种:test condition
第二种: [ condition ] 注意:使用方括号时,要注意在条件两边加上空格
二、文本测试
2.1、文本测试功能
测试文件是什么文件类型
1)按照文件类型
-e 文件名 文件是否存在
-s 文件名 是否为非空 (非空 里面是不是 是;有东西 不是 :没有东西)
-b 文件名 块设备文件
-c 文件名 字符设备文件
-d 文件名 目录文件
-f 文件名 普通文件-L 文件名 软链接文件 注意:要大写
-S 文件名 套接字文件 注意:要大写
-p 文件名 管道文件巧记“bcd-lsp 块字目 普通文件 软链接 软链接 管道”
例1
输出结果
2)两个文件之间的比较
文件1 -nt 文件2 文件1的修改时间是否比文件2新
文件1 -ot 文件2 文件1的修改时间是否比文件2旧
文件1 -ef 文件2 两个文件的inode节点号是否一样,用于判断是否是硬链接
例2
输出结果
三、字符串测试
3.1、字符串测试功能
字符内容和长度的比较
s1 = s2 测试两个字符串的内容是否完全一样
s1 != s2 测试两个字符串内容不一样
-z s1 测试s1 字符串的长度为0-n s1 测试s1 字符串的长度不为0
例1
输出结果
注意在shell编程里,真,返回为0 , 假,返回非0
四、数字测试
4.1、数字测试功能
比较数字的大小
a -eq b 测试a 与b 是否相等
a -ne b 测试a 与b 是否不相等
a -gt b 测试a 是否大于b
a -ge b 测试a 是否大于等于b
a -lt b 测试a 是否小于b
a -le b 测试a 是否小于等于b
英文单词:equal :相等 shell比较符: -eq
英文单词:not equal :不等于 shell比较符: -ne
英文单词:less :小于 shell比较符: -lt
英文单词:less equal :小于等于 shell比较符: -le
英文单词:greater than :大于 shell比较符: -gt
英文单词:greater equal :大于等于 shell比较符: -ge
例子1:
输出结果
五、复合测试
5.1、什么是复合测试语句
通过前面的上述测试操作,都是单一测试语句。而复合测试,字面意思,一个复合测试语句,可以存在测试文字语句、字测试符串语句、测试数字测试语句。
比如:我想知道某个文件存不存在,存在的话,是目录文件类型? 是 返回true 告知我。
5.2、复合测试语句二种形式
第一种形式:命令执行控制
&&:
例1:测试 file存不存在,存在的话 是目录文件类型? 是的话,返回 true
test -e $file && test -d $file && echo "true"
&&左边命令执行成功(即返回0)shell才执行&&右边的命令
注意:&&的特点,存在一个不满足情况,即不执行后面的语句,退出返回:非0
||:
例2:测试某数字num, 是不是在 小于等于0 或者在 大于等于200的区间。
test $num -le 0 || test $num -ge 200
||左边的命令未执行成功,shell才执行||右边的命令
注意:如果 ||左边语句执行成功(即为真),就不执行 || 右边的语句命令
例3,上机操作
提示:当前目录下,有此文件(huai.txt),且为普通文件
输出结果
分析:输入51存入num1. 不满足条件,返回1,输入260存入num2中,满足条件,返回0
第二种形式:多重条件判定
-a | (and)两边同时成立,才为真 test -r file -a -x file file 同时具有 r 与 x 权限时,才为 true. |
-o | (or)两边存在一个成立,即为真 test -r file -o -x file file 具有 r 或 x 权限时,就传回 true |
! | 相反状态 test ! -x file 当 file 不具有 x权限 时,回传 true |
上述例子对比
输出结果
分析:输入50存入num1. 不满足条件,返回1,输入250存入num2中,满足条件,返回0