shell编程-条件判断(图文详细)

文章目录

    • 前言
    • 1. 按照文件类型进行判断
      • 1.1 两种判断格式
    • 2. 按照文件权限进行判断
    • 3. 两个文件之间进行比较
    • 4.两个整数之间比较
    • 5. 字符串的判断
    • 6. 多重条件判断
    • 7. 总结

前言

这些条件判断只要是在shell编程当中使用,是给计算机判断的。
不像ls命令那样,直接显现给用户的。

1. 按照文件类型进行判断

测试选项 作用
-b文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)
-c 文件 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)
-d 文件 判断该文件是否存在,并且是否为目录文件(是目录文件为真)
-e 文件 判断该文件是否存在(存在为真)
-f 文件 判断该文件是否存在,并且是否为普通文件(是普通文件为真)
-L文件 判断文件是否存在,并且是否为符号连接文件(是符号连接文件为真)
-p 文件 判断该文件是否存在,并且是否为管道文件(是管道文件为真)
-s 文件 判断该文件是否存在,并且是否为非空(非空为真)
-S 文件 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真)

小提示: 块设备文件、字符设备文件、管道符文件、套接字文件,这都是特殊设备文件当中的设备文件类型。这种四种类型文件见的很少,系统当中有,也不需要操作,都是系统默认的配置文件。

1.1 两种判断格式

(1)命令: test -e /root/install.log
(2)命令:[ -e /root/install.log ]
shell编程-条件判断(图文详细)_第1张图片

提示:(1)$?判断上一条命令是否执行正确。 返回值为0是正确,返回值非0就为假。
(2) 第二种判断格式在shell编程当中比较常用
(3) ls这些命令是给用户看的,而这些是给计算机进行判断的。

举个栗子:

  • 命令: [-d /root] && echo "yes" || echo "no"
    作用:第一个判断命令如果正确执行,则打印"yes",否则打印"no"
    shell编程-条件判断(图文详细)_第2张图片

2. 按照文件权限进行判断

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

举个栗子:
(1) 判断student文件是否有写权限,只有三个身份中有一个有写权限,就返回真。
shell编程-条件判断(图文详细)_第3张图片

3. 两个文件之间进行比较

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

巧记选项:
这些选项都跟英文有关系: newer than 、older than、equal file

举个栗子
命令: ln /root/student /tmp/stu
作用: 创建个硬链接
命令: [ /root/student -ef /tmp/stu ] && echo "yes" || echo "no"
作用: 用test测试下,果然很有用
shell编程-条件判断(图文详细)_第4张图片
shell编程-条件判断(图文详细)_第5张图片
shell编程-条件判断(图文详细)_第6张图片
提示: 每个文件都有一个inode号,相当于文件的ID号。硬链接,文件一文件二,两个文件的文件名可以随便改,不像软连接一样,有自己的标志,但是我只能判断他们两个的inode号,从而判断他们两个是不是同一个文件。

4.两个整数之间比较

测试选项 作用
整数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(小于等于为真)

巧记选项:
这些选项都跟英文有关系: equal 、nether、 greater、 littler、greatterequal、littlerequal

举个栗子:

  • (1)直接进行数字比较
    shell编程-条件判断(图文详细)_第7张图片

5. 字符串的判断

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

举个栗子:

  • 命令: name=sc
    作用:给name变量赋值
    命令: [ -z "$name" ] && echo "yes" || echo "no"
    作用:判断name变量是否为空,因为不为空,所以返回no
    shell编程-条件判断(图文详细)_第8张图片
    小提示: 这个比较重要。 写程序的时候要求用户输入一个值,比如输入年龄,通过年龄进行计算。有一种情况就是用户啥都不输,这时会产生bug,多以就需要提前判断一下。

再来个栗子:

  • 命令: aa=11
    命令: bb=22
    作用: 给变量aa和变量bb赋值
    命令: [ "$aa"=="$bb" ] && echo "yes" || echo "no"
    shell编程-条件判断(图文详细)_第9张图片

6. 多重条件判断

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

举个栗子:

  • 命令: aa=11
    命令: [ -n "$aa" -a "$aa" -gt 23] && echo "yes" || echo "no"
    作用: 判断变量aa是否有值,同时判断变量aa是否大于23。因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也是假
    shell编程-条件判断(图文详细)_第10张图片

7. 总结

(1) 测试语句不是给用户来判断的,主要是用在程序当中,计算机自动来判断语句。
(2) 如果使用[ -e /root/install.log ]这种格式的话,请注意里面有两个空格绝对不能漏掉!!!如下图所示:
shell编程-条件判断(图文详细)_第11张图片

你可能感兴趣的:(shell编程)