【现学现忘&Shell编程】— 39.Shell中的条件判断(二
2020-10-27 本文已影响0人
繁华似锦Fighting
3、按照文件权限进行判断
test
命令是非常完善的判断命令,还可以判断文件的权限,我们通过下表来看看:
测试选项 | 作用 |
---|---|
-r 文件 |
判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真)(常用) |
-w 文件 |
判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真)(常用) |
-x 文件 |
判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真)(常用) |
-u 文件 |
判断该文件是否存在,并且是否该文件拥有SUID权限(有SUID权限为真)(会用到) |
-g 文件 |
判断该文件是否存在,并且是否该文件拥有SGID权限(有SGID权限为真)(会用到) |
-k 文件 |
判断该文件是否存在,并且是否该文件拥有SBit权限(有SBit权限为真) |
示例:
Linux系统中tmp目录下的文件,情况如下:
[root@localhost tmp]# ll
总用量 12
-rw-r--r--. 1 root root 371 10月 16 13:28 student.txt
-rw-r--r--. 1 root root 318 10月 14 18:03 test2.txt
-rw-r--r--. 1 root root 69 10月 16 17:39 test.txt
练习:
# 1.查看tmp目录student.txt是否有写的权限
# tmp目录student.txt文件权限如下:
# -rw-r--r--. 1 root root 371 10月 16 13:28 student.txt
[root@localhost tmp]# [ -w student.txt ] && echo yes || echo no
yes
# 上面证明在tmp目录中student.txt文件存在,并拥有写权限。
# 注意:
# -w选项是分不清是所有者,所数组,和其他人谁有写权限的,
# 只要该文件任何一个身份中出现写的权限,-w选项的判断就是正确的。
# 如果你非要判断某一个身份是否有写的权限,
# 就需要我们自己手动把文件的权限按需求截取下来,然后编写程序来判断。
# -r选项和-x选项同理。
# 2.判断student.txt文件是否拥有SUID权限
[root@localhost tmp]# [ -u student.txt ] && echo yes || echo no
no
# 可以看到student.txt文件没有设置SUID权限
# 我们接下来给student.txt文件设置一下SUID权限
[root@localhost tmp]# chmod u+s student.txt
# 查看一下测试student.txt文件的权限
[root@localhost tmp]# ll student.txt
-rwSr--r--. 1 root root 371 10月 16 13:28 student.txt
# 可以看到student.txt文件的权限中多了一个大S权限
# 关于SUID权限相关内容可以点击如下链接进行查看:
# https://blog.csdn.net/Liuyuelinjiayou/article/details/107197846
# 接下来我们在判断student.txt文件受否拥有SUID权限
[root@localhost tmp]# [ -u student.txt ] && echo yes || echo no
yes
# 练习完成后,尽量尽快的还原文件,一般之后的练习使用。
[root@localhost tmp]# chmod u-s student.txt
[root@localhost tmp]# ll student.txt
-rw-r--r--. 1 root root 371 10月 16 13:28 student.txt
4、两个文件之间进行比较
通过下表来看看如何进行两个文件之间的比较:
测试选项 | 作用 |
---|---|
文件1 -nt 文件2 |
判断文件1的修改时间是否比文件2的新(如果新则为真)。 |
文件1 -ot 文件2 |
判断文件1的修改时间是否比文件2的旧(如果旧则为真)。 |
文件1 -ef 文件2 |
判断文件1是否和文件2的Inode号一致,可以理解为两个文件是否为同一个文件。这个用于判断硬链接是很好的方法。 |
示例:
# 把tmp目录下的student.txt文件,硬连接到root目录下student文件。
# 也就是给tmp目录下的student.txt文件创建一个硬连接,在root目录下。
[root@localhost tmp]# ln /tmp/student.txt /root/student
# 然后判断/tmp/student.txt文件和/root/student文件是否为同一文件。
[root@localhost tmp]# [ /tmp/student.txt -ef /root/student ] && echo yes || echo no
yes
# 结果为是。