Shell编程之条件判断(测试语句)——文件类型、文件权限、文件比较、整数比较、字串判断、多重条件判断

条件判断式,说白了一个条件是否成立。测试语句不是给用户来判断,而是让计算机来判断的

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

在这里插入图片描述其中最常用的测试选项是:-d 文件、-e 文件、-f 文件。

1.1> 两种判断格式:
  • [root@localhost ~]# test -e /root/install.log

  • [root@localhost ~]# [ -e /root/install.log ]

注意:
(1)其中两种判断格式都一样的。但是,第二种[ ]中括号和-e之间有空格,这种格式嘴上用在Shell脚本中。
(2)这种判断文件是否存在的格式,是给程序使用的,目的是为了写脚本。
(3)命令:echo $? —— > 输出上一条命令是否正确,正确输出0,错误输出1。

示例如下:

[root@root ~]# ls
anaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐
install.log      student.txt         模板    图片  下载  桌面
[root@root ~]# test -e student.txt
[root@root ~]# echo $?
0
[root@root ~]# test -e student.txtdddd
[root@root ~]# echo $?
1
[root@root ~]# [ -e student.txt ]
[root@root ~]# echo $?
0
[root@root ~]# [ -e student.txtkkkk ]
[root@root ~]# echo $?
1
1.2 > 通过逻辑与(&&)和逻辑或(||)判断是否存在

每次通过前面两个命令判断完,还需要通过[echo $?]命令输出判断结果,很是麻烦,因此我们尅通过以下命令:

  • [ -d /root] && echo “yes” || echo “no”
    #第一个判断命令如果正确执行,则打印 “yes” ,否则打印 “ no ”
    #逻辑与(&&),当第一条命令正确执行,第二条命令才会执行;逻辑或(||),当第一条命令不正确执行,第二条命令才会执行

示例如下:

[root@root ~]# [ -f /root/student.txt ] && echo "yes" || echo  "no"
yes
[root@root ~]# [ -f /root ] && echo "yes" || echo  "no"
no
2、按照文件权限进行判断

在这里插入图片描述其中最常用的测试选项是:-r 文件、-w 文件、-x 文件。

2.1> 命令格式如下:
  • [ -w student.txt ] && echo “yes” || echo “no”
    #判断文件是否拥有写权限

示例如下:

[root@root ~]# ll
总用量 104
-rw-------. 1 root root  1498 6月  22 19:26 anaconda-ks.cfg
-rw-r--r--. 1 root root 47922 6月  22 19:26 install.log
-rw-r--r--. 1 root root 10033 6月  22 19:23 install.log.syslog
-rw-r--r--. 1 root root   111 7月  14 17:21 student.txt
drwxr-xr-x. 2 root root  4096 6月  22 19:30 公共的
drwxr-xr-x. 2 root root  4096 6月  22 19:30 模板
drwxr-xr-x. 2 root root  4096 6月  22 19:30 视频
drwxr-xr-x. 2 root root  4096 6月  22 19:30 图片
drwxr-xr-x. 2 root root  4096 6月  22 19:30 文档
drwxr-xr-x. 2 root root  4096 6月  22 19:30 下载
drwxr-xr-x. 2 root root  4096 6月  22 19:30 音乐
drwxr-xr-x. 3 root root  4096 7月  13 14:00 桌面
[root@root ~]# [ -w /root/student.txt ] && echo yes || echo no
yes

#用这种方式测试,就没有我们用肉眼看那么准确了。
#不管所有者,所属组,其他人,只要这个三个身份中有一个人有写权限,它的返回值就为yes。
#它不会区分那么细。
3、两个文件之间进行比较

在这里插入图片描述
注意:

  • 所谓的Inode号,就是i结点号。每一个文件都有它自己的Inode号,可以看做是文件的ID号。如果文件1和文件2作了硬链接,它们两个的区别是两个文件的文件名可以随便改,只有通过判断它们两个的Inode号,是否为同一个文件。
  • 软连接有自己的标志,而硬链接没有。
3.1 > 示例说明:

ln /root/student.txt /tmp/stu.txt
#创建和硬链接

[ /root/student.txt -ef /tmp/stu.txt ] && echo yes || echo no
#用test测试一下,果然很有用

  • 示例(1):
[root@root ~]# ll /etc
... ...
lrwxrwxrwx.  1 root root     56 6月  22 19:16 favicon.png -> /usr/share/icons/hi
... ...
#软连接有箭头(—>)表示他的源文件在啥地方

[root@root ~]# ll
总用量 104
-rw-------. 1 root root  1498 6月  22 19:26 anaconda-ks.cfg
-rw-r--r--. 1 root root 47922 6月  22 19:26 install.log
-rw-r--r--. 1 root root 10033 6月  22 19:23 install.log.syslog
-rw-r--r--. 1 root root   111 7月  14 17:21 student.txt
[root@root ~]# ln /root/student.txt /tmp/stu.txt
#将/root下的student.txt硬连接为/tmp成stu.txt的文件

[root@root ~]# ll -i /root/student.txt 
273719 -rw-r--r--. 2 root root 111 7月  14 17:21 /root/student.txt
[root@root ~]# ll -i /tmp/stu.txt 
273719 -rw-r--r--. 2 root root 111 7月  14 17:21 /tmp/stu.txt
#只有通过-i选项,查看它们的I结点号是否相同,进行判断,这是通过人肉眼来看的。
#所以想让计算机判断只能通过:-ef  来判断
  • 示例(2):

通过-ef选项,判断是否为硬链接。

[root@root ~]# [ /root/student.txt -ef /tmp/stu.txt ] && echo yes || echo no
yes
You have new mail in /var/spool/mail/root
[root@root ~]# 
4、两个整数之间比较

在这里插入图片描述示例说明:

[root@root ~]#  [ 23 -gt 22 ] && echo yes || echo no
yes
[root@root ~]#  [ 23 -gt 23 ] && echo yes || echo no
no
[root@root ~]#  [ 23 -ge 23 ] && echo yes || echo no
yes
[root@root ~]#  [ 23 -ge 40 ] && echo yes || echo no
no
5、字串的判断

在这里插入图片描述

5.1> 判断字串是否为空:

name=sc
#给name变量赋值

[ -z “$name” ] && echo “yes” || echo “no”
#判断name变量是否为空,因为不为空,所以返回no

示例如下:

[root@root ~]# name=sc
[root@root ~]# [ -z "$name" ] && echo "yes" || echo "no"
no
[root@root ~]# [ -z "$namebo" ] && echo "yes" || echo "no"
yes
  • 通过以上这个方法判断变量是否有值,在程序当中非常重要。
  • 在程序当中,我们常常要求用户输入一个值,比如年龄,在通过年龄进行一系列的计算。但是,我们有些用户啥也不输,直接回车,这个时候我们就先要进行判断一下有没有值,如果没有值程序就直接终止了,后续程序就不用执行了,免得程序出现bagel。
5.2> 判断两个值是否相等

aa=11
bb=22
#给变量aa和变量bb赋值

[ “$aa”=="$bb" ] && echo “yes” || echo “no”
#判断两个变量的值是否相等,明显不相等,所以返回no

注意:

  • 这里的“==”号,是把aa和bb当做字串来判断。而-eq是当做数值来判断,当做整型来判断。我们更习惯于用“==”号进行判断。也可以使用“=”号,但是我们推荐使用“==”号。
6、多重条件判断

在这里插入图片描述

6.1 > 示例

aa=11
[ -n “$aa” -a “$aa” -gt 23 ] && echo “yes” || echo “no”
#判断变量aa是否有值,同时判断变量aa的值是否大于23
#因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也为假

示例如下:

[root@root ~]# aa=24
[root@root ~]# [ -n "$aa" -a "$aa" -gt 23 ] && echo yes || echo no
yes
[root@root ~]# [ -n "$aa" -a "$aa" -gt 27 ] && echo yes || echo no
no
[root@root ~]# [ -z "$aa" -a "$aa" -gt 27 ] && echo yes || echo no
no
[root@root ~]# 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值