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

前言

这些条件判断只要是在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 ]
在这里插入图片描述

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

举个栗子:

  • 命令: [-d /root] && echo "yes" || echo "no"
    作用:第一个判断命令如果正确执行,则打印"yes",否则打印"no"
    在这里插入图片描述

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

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

举个栗子:
(1) 判断student文件是否有写权限,只有三个身份中有一个有写权限,就返回真。
在这里插入图片描述

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测试下,果然很有用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提示: 每个文件都有一个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)直接进行数字比较
    在这里插入图片描述

5. 字符串的判断

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

举个栗子:

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

再来个栗子:

  • 命令: aa=11
    命令: bb=22
    作用: 给变量aa和变量bb赋值
    命令: [ "$aa"=="$bb" ] && echo "yes" || echo "no"
    在这里插入图片描述

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,所以虽然第一个判断值为真,返回的结果也是假
    在这里插入图片描述

7. 总结

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

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值