shell 表达式整数和字符串逻辑运算

  • 注意

    • 单中括号[]里只能用-a 表示与, -o 表示或。不能适用&& 和 ||
    • 双中括号[[]],不能使用-a和-o, 只能使用&& 和 ||
    • 多个表达式连接只能用 && 和 ||, 如 [] && [] || []
  • 整数多条件判断, [] 和 [[]] 都适用

    [[ 2 -gt 1 && 3 -gt 1 ]] && echo 'T' || echo 'F'		# T
    [[ 2 -gt 1 && 1 -gt 1 ]] && echo 'T' || echo 'F'		# F
    [[ 2 -gt 1 || 1 -gt 1 ]] && echo 'T' || echo 'F'		# T
    [[ 2 -gt 1 ]] && [[ 3 -gt 1 ]] && echo 'T' || echo 'F'		# T
    
    [ 2 -gt 1 -a 3 -gt 1 ] && echo 'T' || echo 'F'			# T 
    [ 2 -gt 1 -a 1 -gt 1 ] && echo 'T' || echo 'F'			# F
    [ 2 -gt 1 -o 1 -gt 1 ] && echo 'T' || echo 'F'			# T
    
  • 字符串多条件判断, 只适用于[[]]

    • 正确示例
      v='Hello World'
      
      [[ $v == *'Hello'* && $v == *'World'* ]] && echo 'Y' || echo 'N'	# Y
      [[ $v == *'Hello'* || $v == *'test'* ]] && echo 'Y' || echo 'N'		# Y
      [[ $v == *'Hello'* && $v == *'test'* ]] && echo 'Y' || echo 'N'		# N
      
      [[ $v == *'Hello'* ]] && [[ $v == *'World'* ]] && echo 'Y' || echo 'N'	# Y
      [[ $v == *'Hello'* ]] || [[ $v == *'test'* ]] && echo 'Y' || echo 'N'	# Y
      [[ $v == *'Hello'* ]] && [[ $v == *'test'* ]] && echo 'Y' || echo 'N'	# N
      
    • 错误示例
      v='Hello World'
      
      [ "$v" == *'Hello'* -a "$v" == *'World'* ] && echo 'Y' || echo 'N'
      [ "$v" == *'Hello'* -o "$v" == *'test'* ] && echo 'Y' || echo 'N'
      
      [ "$v" == *'Hello'* ] && [ "$v" == *'World'* ] && echo 'Y' || echo 'N'
      [ "$v" == *'Hello'* ] || [ "$v" == *'test'* ] && echo 'Y' || echo 'N'
      
      结果都为N
上一篇:Java基础知识(16)- Java 注解 (Annotation)


下一篇:shell 判断字符串是否包含