码迷,mamicode.com
首页 > 系统相关 > 详细

1.3 Shell脚本编程基础之条件测试

时间:2018-10-30 13:09:02      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:专用   过程   字符   声明   echo   rip   shell脚本   file   评估   

判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成测试过程
评估布尔声明,以便用在条件性执行中
? 若真,则返回0
? 若假,则返回1

测试命令:

? test EXPRESSION
? [ EXPRESSION ]
? [[ EXPRESSION ]]
注意:EXPRESSION前后必须有空白字符

注意: 表达式一般用于[[ ]]中

bash的数值测试

-v VAR

变量VAR是否设置

数值测试:

-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于

bash的字符串测试

用于字符测试中的操作数应该使用双引号标识

字符串测试:

= 是否等于
> ascii码是否大于ascii码
< 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配

注意: 此表达式一般用于[[ ]]中;扩展的正则表达式

-z "STRING“ 字符串是否为空,空为真,不空为假
-n "STRING“ 字符串是否不空,不空为真,空为假

注意:用于字符串比较时的用到的操作数都应该使用引号

文件存在性测试

-e FILE: 文件存在性测试,存在为真,否则为假
-b FILE:是否存在且为块设备文件
-c FILE:是否存在且为字符设备文件
-d FILE:是否存在且为目录文件
-f FILE:是否存在且为普通文件
-h FILE 或 -L FILE:存在且为符号链接文件
-p FILE:是否存在且为命名管道文件
-S FILE:是否存在且为套接字文件

[root@CentOS7 ~]# [ -e /etc/passwd ] && echo exist 
exist

权限测试

-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行
-u FILE:是否存在且拥有suid权限
-g FILE:是否存在且拥有sgid权限
-k FILE:是否存在且拥有sticky权限
[root@CentOS7 ~]# [ -u /bin/passwd ] && echo SUID
SUID

双目标测试

FILE1 -ef FILE2: FILE1是否是FILE2的硬链接
FILE1 -nt FILE2: FILE1是否新于FILE2(比较mtime)
FILE1 -ot FILE2: FILE1是否旧于FILE2

#!/bin/bash
#判断参数文件是否是“.sh”后缀的文件,是的话添加执行权限
[ -f $1 -a ! -x $1 ] || { echo "$1 not is a file"; exit; } 
echo "$1" | grep ".*[.]sh$" >> /dev/null
[ $? -eq 0 ]     && { chmod +x $1; echo "Set up!"; }     || echo "$1 not is a script"

1.3 Shell脚本编程基础之条件测试

标签:专用   过程   字符   声明   echo   rip   shell脚本   file   评估   

原文地址:http://blog.51cto.com/13958408/2310600

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!