shell 条件测试(八)

前言:

为了能够正确方便的处理shell程序,Linux shell提供了一组测试运算符。通过这些运算符,shell程序能够判断某些条件是否满足条件。条件测试语句在shell判断语句中和循环语句中起到非常重要的作用。

1. 条件测试的基本语法

在shell程序中,用户可以使用测试语句来测试指定条件表达式的条件的真或假。当指定条件为真值之时,整个条件测试结果为0,反之,如果指定条件为假时,其条件测试结果为非0值。

语法:

格式一:
test  条件表达式 #使用test命令进行条件测试表达式的方法,
      #test命令和(条件表达式)之间必须要一个(或多个)空格。
格式二:
[ 条件表达式 ] # 使用[]方式去进行条件测试时,注意要表达式与'['前后之间要有一个空格。
格式三:
[[ 条件表达式 ]]  # 使用[]方式去进行条件测试时,注意要表达式与'[['前后之间要有一个空格。

2.文件测试表达式
语法格式:

   [ 操作符  文件或者是目录 ]

常用的文件测试操作符:

    • -d 文件 : 文件存在并且是一个目录即为真,则表达式成立
    • -f 文件 : 文件存在并且是一个普通文件即为真,则表达式成立
    • -e 文件 : 文件存在即为真,不管该文件是一个普通文件还是一个目录
    • -r 文件 : 文件存在且可读为真,则表达式成立
    • -s 文件 : 文件存在切大小不为0字节为真,表达式成立
    • -w 文件 : 文件存在并且可写为真,表达式成立
    • -x 文件: 文件存在并且可执行为真,表达式成立
    • -L 文件: 文件存在并且为链接文件为真,表达式成立

示例:

[root@localhost ~]# touch test{1..9}.txt
[root@localhost ~]# [ -f test10.txt ] && echo yes || echo no
no
[root@localhost ~]# [ -f test1.txt ] && echo yes || echo no
yes

[root@localhost ~]# [ -d test1.txt ] && echo yes || echo no
no
[root@localhost ~]# mkdir test10
[root@localhost ~]# [ -d test10 ] && echo yes || echo no
yes
[root@localhost ~]# ll test10
总用量 0
[root@localhost ~]# [ -e test10 ] && echo yes || echo no
yes
[root@localhost ~]# [ -e test1 ] && echo yes || echo no
no
[root@localhost ~]# [ -e test9 ] && echo yes || echo no
no
[root@localhost ~]# [ -s test9 ] && echo yes || echo no
no
[root@localhost ~]# echo 123 > test9
[root@localhost ~]# ll test9
-rw-r--r--. 1 root root 4 2月   6 11:32 test9
[root@localhost ~]# [ -s test9 ] && echo yes || echo no
yes
[root@localhost ~]# [ -w test9 ] && echo yes || echo no
yes
[root@localhost ~]# chmod a-w test9
[root@localhost ~]# ll test9
--r-------. 1 root root 4 2月   6 11:32 test9
[root@localhost ~]# [ -w test9 ] && echo yes || echo no
no

3.字符串测试表达式

    • -n “字符串” 若字符串长度不为0,则表达式成立
    • -z “字符串” 若字符串长度为0,则表达式成立
    • “字符串1” = “字符串2” 若两个字符串相等,则表达式为真
    • “字符串1” != “字符串2” 若两个字符串不相等,则表达式为真

示例:

[root@localhost ~]# [ -n "chen" ] && echo yes || echo no
yes
[root@localhost ~]# [ -n "" ] && echo yes || echo no
no
[root@localhost ~]# [ -z "" ] && echo yes || echo no
yes
[root@localhost ~]# [ -z "chen" ] && echo yes || echo no
no

4.整数测试表达式
(1)在[]以及test中使用的比较符号

    • -eq 相等
    • -ne 不相等
    • -gt 大于
    • -ge 大于等于
    • -lt 小于
    • -le 小于等于

示例:

[root@localhost ~]# [ 3 -gt 5 ] && echo yes || echo no
no
[root@localhost ~]# [ 8 -gt 5 ] && echo yes || echo no
yes
[root@localhost ~]# [ 3 -ge 5 ] && echo yes || echo no
no
[root@localhost ~]# [ 5 -ge 5 ] && echo yes || echo no
yes
[root@localhost ~]# [ 5 -ge 3 ] && echo yes || echo no
yes

(2)在[[]]以及(())中使用的比较符号

    • ==或=  相等
      
    • !=  不相等
      
    • >  大于
      
    • >=  大于等于
      
    • < 小于
      
    • <=  小于等于
      

示例:

[root@localhost ~]# [ 5 > 3 ] && echo yes || echo no
yes
[root@localhost ~]# [ 5 >= 3 ] && echo yes || echo no
-bash: [: 5: 需要一元表达式
no

5.逻辑操作符
(1)在[]以及test中使用的比较符号

    • -a 逻辑与
    • -o 逻辑或
    • !逻辑非
      (2)在[[]]以及(())中使用的比较符号
    • && 逻辑与
    • || 逻辑或
    • ! 逻辑非
      6.命令执行顺序
    •  ;使用此符号时命令依次执行,当见面的命令执行错误时,后面的命令依旧执行。
      

示例:

[root@localhost ~]# date;pwd
2021年 02月 06日 星期六 11:58:44 CST
/root
[root@localhost ~]# dat;pwd
-bash: dat: 未找到命令
/root
    • && 使用此符号时,当前面的命令执行成功时才就不会执行后面的命令
      

示例:

[root@localhost ~]# date&&pwd
2021年 02月 06日 星期六 12:01:30 CST
/root
[root@localhost ~]# dat&&pwd
-bash: dat: 未找到命令
[root@localhost ~]# date&&pwda
2021年 02月 06日 星期六 12:02:19 CST
-bash: pwda: 未找到命令
    • || 当前面的命令执行不成功时才会执行后面的命令
      

示例:

[root@localhost ~]# dat||pwd
-bash: dat: 未找到命令
/root
[root@localhost ~]# date||pwd
2021年 02月 06日 星期六 12:04:07 CST
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值