这篇文章上次修改于 414 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
test 命令
- test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
数值测试
参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于则为真 -lt 小于则为真 -le 小于等于则为真
[root@master236 ~]# test 1 -gt 2 && echo "对" || echo "错误"
错误
字符串测试
参数 说明 = 等于则为真 != 不相等则为真 -z 字符串 字符串的长度为零则为真 -n 字符串 字符串的长度不为零则为真
[root@master236 ~]# cardName="card"
[root@master236 ~]# hcardName="hcard"
[root@master236 ~]# if test ${cardName} == ${hcardName}; then echo "同一张卡"; else echo "不同的卡"; fi
不同的卡
[root@master236 ~]# hcardName="card"
[root@master236 ~]# if test ${cardName} == ${hcardName}; then echo "同一张卡"; else echo "不同的卡"; fi
同一张卡
文件测试
参数 说明 -e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名 如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符则为真 -d 文件名 如果文件存在且为目录则为真 -f 文件名 如果文件存在且为普通文件则为真 -c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真
[root@master236 ~]# test -e test.sh && echo "文件存在"
文件存在
[root@master236 ~]# test -e test.nsh && echo "文件存在" || echo "文件不存在"
文件不存在
- Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低
[root@master236 ~]# test -e test.sh -a -e pdfContract && echo "2个文件都存在"
2个文件都存在
[] 中括号
- [] 是shell的内置关键字,基本等价于test命令
[root@master236 ~]# [ -x test.sh ] && echo "true" || echo "false"
false
[root@master236 ~]# [ -f test.sh -o -f jenkins ] && echo "true" || echo "false"
true
[[]] 双中括号
- [[]] 是shell的内置关键字,可以看成是[] 的升级版本
- 允许在双中括号内使用逻辑运算符"&&"、"||"、"!"和"()"
- 支持正则表达式
- 不需要、也不能对 >、< 进行转义,转义后会出错
- 不需要把变量名用双引号""包围起来,即使变量是空值,也不会出错
- 剔除了 test 命令的-o和-a选项,你只能使用 || 和 &&
root@master236 ~]# title1="标题1"
[root@master236 ~]# [[ -z $title1 && -z $title2 ]] && echo "都是空字符" || echo "至少有一个不是空字符"
至少有一个不是空字符
[root@master236 ~]# title1=""
[root@master236 ~]# [[ -z $title1 && -z $title2 ]] && echo "都是空字符" || echo "至少有一个不是空字符"
都是空字符
[root@master236 ~]# read -p "请输入手机号: " tel
请输入手机号: 17688965431
[root@master236 ~]# echo $tel
17688965431
[root@master236 ~]# [[ $tel =~ ^1[0-9]{10}$ ]] && echo "是手机号" || echo "不是手机号"
是手机号
没有评论
博主关闭了评论...