Shell 基本语法结构(3):条件判断

1. 条件判断语法结构

1.1. 语法格式

  • 格式1: test 条件表达式

    # chen @ localhost in /root [16:26:25] 
    $ test "hello" = "hi" && echo "=" || echo "!=" 
    !=
    
  • 格式2:[ 条件表达式 ]

    # chen @ localhost in /root [16:28:35] 
    $ [ "$a" = "$b" ] && echo "=" || echo "!=" 
    !=
    
  • 格式3:[[ 条件表达式 ]] 支持正则

    # chen @ localhost in /root [16:21:04] C:1
    $ [[ "$a" == "$b" ]] && echo "=" || echo "!=" 
    !=
    

注意!!!

  • [[]] 与 []两边最好都保持空格,[[]] 是两边一定要有空格进行隔离
  • [ ] [[ ]] 区别
    • [[]] 支持 &&||[[]]逻辑运算符, 同时支持逻辑短路,而 [] 不支持。[] 支持的逻辑运算符为-a-o,此处-a-o相当于是test命令的一个参数,不能使用&&、||
       # chen @ localhost in /root [16:34:28] 
      $ [ "$a" = "$b" -o -n "$a" ] && echo "hi" || echo "bye" 
      hi
      # chen @ localhost in /root [16:34:40] 
      $ [ "$a" = "$b" || -n "$a" ] && echo "hi" || echo "bye" 
      [: ']' expected
      zsh: -n: 未找到命令...
      zsh: command not found: -n
      bye
      
      
    • []是命令,故在其中的变量引用或常量,需使用双引号或者单引号括起来,因为会出现单词分割现象
    • [[]] 支持正则表达式的匹配。
    • [[]]为一个keyword,同括号与表达式中间必须要有空格进行隔离
    • 数值大小比较时在 [] 中进行比较,要使用 -lt-gt 这样的比较符,不能使用 <>
      # chen @ localhost in ~/Shell [16:44:33] 
      $ [ 1 > 2 ] && echo "true" || echo "false"
      true
      
      # chen @ localhost in ~/Shell [16:46:15] 
      $ [ 1 \> 2 ] && echo "true" || echo "false"
      zsh: condition expected: >
      false
      
      # chen @ localhost in ~/Shell [16:46:23] 
      $ [ 1 -gt 2 ] && echo "true" || echo "false"
      false
      
      # chen @ localhost in ~/Shell [16:46:36] 
      $ [[ 1 > 2 ]] && echo "true" || echo "false"
      false
      
      

1.2. 相关参数

1.2.1. 判断文件类型

-[e] 判断文件是否存在
-[f] 判断文件是否存在并且是一个普通文件
-[d] 判断文件是否存在并是一个目录
-[L] 判断文件是否存在并且是一个软链接文件
-[b] 判断文件是否存在并且是一个快设备文件
-[S] 判断文件是否存在并且是一个套接字文件
-[c] 判断文件是否存在并且是一个字符设备文件
-[p] 判断文件是否存在并且是一个命名管道文件
-[s] 判断文件是否存在并且是一个非空文件

1.2.2. 判断文件权限

-[r] 当前用户对其是否可读
-[w] 当前用户对其是否可写
-[x] 当前用户对其是否可执行

1.2.3. 判断文件新旧

file1 -nt file2:比较file1是否比file2新
file1 -ot file2:比较file1是否比file2旧
file1 -ef file2:比较是否为同一文件,或者用于判断硬链接是否指向同一个为 inode

1.2.4. 判断整数

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

1.2.5. 判断字符串

-[z] 判断是否为空字符串,字符串长度为0则成立
-[n] 判断是否为非空字符串,字符串长度不为0则成立
str1 = str1 判断字符串是否相等
str1 != str1 判断字符串是否不等

1.2.6. 多重条件判断
  • 判断符号
    -a 和 && 逻辑与
    -o和 ||逻辑或

    # chen @ localhost in /root [16:21:04] C:1
    $ [[ "$a" == "$b" ]] && echo "=" || echo "!=" 
    !=
    
  • 类 c 风格的数值比较

    # chen @ localhost in /root [16:14:23] C:2
    $ (( 1== 2)); echo $?
    1
    
    # chen @ localhost in /root [16:17:17] 
    $ (( 1 < 2)); echo $?
    0
    # chen @ localhost in /root [16:18:33] 
    $ (( `id -u` == 0 )); echo $?                           
    1
    # chen @ localhost in /root [16:18:56] 
    $ a=hello;b=hi
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值