ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Shell脚本:条件判断

2022-01-29 14:30:00  阅读:113  来源: 互联网

标签:脚本 文件 Shell 是否 整数 判断 root localhost


7、条件判断

条件判断语法格式

格式1:test 条件表达式
格式2:[ 条件表达式 ]     #注意空格
格式3:[[条件表达式]]     #支持正则表达式

条件判断的相关参数

问:你要判断什么?

答:我要判断文件类型,判断文件新旧,判断文件是否存在,判断字符串是否相等。。。。。

判断文件类型

红色字为重点,最常用

判断参数含义
-e判断文件是否存在(任何类型文件)
-f判断文件是否存在,并且是一个普通文件
-d判断文件是否存在,并且是一个目录
-L判断文件是否存在,并且是一个软连接文件
-b判断文件是否存在,并且是一个块设备文件
-S判断文件是否存在,并且是一个套接字文件
-c判断文件是否存在,并且是一个字符设备文件
-p判断文件是否存在,并且是一个命名管道文件
-s判断文件是否存在,并且是一个非空文件(有内容)

举例说明:判断文件是否存在?(重点)

[root@localhost ~]# touch pokes.txt
[root@localhost ~]# test -e pokes.txt 
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e pokessss.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -e pokes.txt ]     #中括号也是可以的,脚本中经常是使用中括号,记得括号两端的空格不能少
[root@localhost ~]# echo $?
0

判断文件权限

红色字为重点,最常用

测试选项作用
-r 文件判断该文件是否存在,并且是否该文件拥有读的权限,有读权限为真
-w 文件判断该文件是否存在,并且是否该文件拥有写的权限,有写权限为真
-x 文件判断该文件是否存在,并且是否该文件拥有执行权限,有执行权限为真
-u 文件判断该文件是否存在,并且是否该文件拥有SUID权限,有SUID权限为真
-g 文件判断该文件是否存在,并且是否该文件拥有SGID权限,有SGID权限为真
-k 文件判断该文件是否存在,并且是否该文件拥有SBit权限,有SBit权限为真

举例说明:判断文件否有写和执行的权限?

[root@localhost ~]# ll
总用量 4
-rw-------. 1 root root 1241 9月  20 2020 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 1月  28 10:51 pokes.txt
[root@localhost ~]# [ -w pokes.txt ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -x pokes.txt ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# 

两个文件之间比较(新旧)

选项作用
文件1 -nt 文件2判断文件1的修改时间是否比文件2的新,如果新则为真
文件1 -ot 文件2判断文件1的修改时间是否比文件2的旧,如果旧则为真
文件1 -ef 文件2判断文件1和文件2的Inode号是否一致,如果一致则为真。可以理解为两个文件是否为同一个文件,这个判断用于判断硬链接是很好的方法。

两个整数之间的比较

红色字为重点,最常用

测试选项作用
整数1 -eq整数2判断整数1是否和整数2相等,相等即为真
整数1 -ne整数2判断整数1是否和整数2不相等,不相等为真
整数1 -gt整数2判断整数1是否大于整数2,大于为真
整数1 -lt整数2判断整数1是否小于整数2,小于为真
整数1 -ge整数2判断整数1是否大于等于整数2,大于等于为真
整数1 -le整数2判断整数1是否小于等于整数2,小于等于为真

举例说明:判断两个整数是否相等?

[root@localhost ~]# [ 23 -eq 24 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ 24 -eq 24 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# 

字符串的判断

选项作用
-z 字符串判断字符串是否为空,为空返回为真
-n 字符串判断字符串是否非空,非空返回为真
字符串1==字符串2 (两个等号)判断字符串是否相等,相等返回为真
字符串1!==字符串2 (两个等号)判断字符串是否不相等,不相等返回为真

举例说明:判断两个字符串是否相等?(重点)

[root@localhost ~]# [ "aa" == "aa" ]      #注意字符串,等号两端都有空格
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ "aa" == "bb" ]
[root@localhost ~]# echo $?
1

多重条件判断

选项作用
判断1 -a 判断2逻辑与,判断1和判断2都成立,最终的结果才为真
判断1 -o 判断2逻辑或,判断1和判断2有一个成立,最终的结果就为真
!判断逻辑非,使原始的判断式取反

举例说明:判断11是否存在,再判断11是否大于23?

[root@localhost ~]# [ -n 11 -a 11 -gt 23 ]    #判断11是否存在,再判断11是否大于23,整数肯定是存在的。
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -n 11 -a 11 -gt 9 ]
[root@localhost ~]# echo $?
0

标签:脚本,文件,Shell,是否,整数,判断,root,localhost
来源: https://blog.csdn.net/pokes/article/details/122743202

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有