zoukankan      html  css  js  c++  java
  • shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别

    1. 关于文件和目录

    -f  判断某普通文件是否存在

    -d  判断某目录是否存在

    -b  判断某文件是否块设备

    -c  判断某文件是否字符设备

    -S  判断某文件是否socket(待修正)

    -L  判断某文件是否为符号链接(待修正)

    -e  判断某东西是否存在(待修正)

    -p  判断某文件是否为pipe 或是 FIFO

    2. 关于文件的属性

    -r  判断文件是否为可读的属性

    -w  判断文件是否为可以写入的属性

    -x  判断文件是否为可执行的属性

    -s  判断文件是否为非空白文件

    -u  判断文件是否具有SUID的属性

    -g  判断文件是否具有SGID的属性

    -k  判断文件是否具有sticky bit的属性

    3. 两个文件之间的判断与比较

    例如[ test file1 -nt file2 ]

    -nt  第一个文件比第二个文件新

    -ot  第一个文件比第二个文件旧

    -ef  第一个文件与第二个文件为同一个( link 之类的文件)

    4. 逻辑的(and)与(or)

    &&   逻辑的 AND 的意思, -a 也是这个意思

    ||  逻辑的 OR 的意思, -o 也是这个意思

    5.运算符相关

    运算符号代表意义

    =  等于  应用于:整型或字符串比较 如果在[] 中,只能是字符串

    !=  不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串

    <  小于 应用于:整型比较 在[] 中,不能使用 表示字符串

    >  大于 应用于:整型比较 在[] 中,不能使用 表示字符串

    -eq  等于 应用于:整型比较

    -ne  不等于 应用于:整型比较

    -lt  小于 应用于:整型比较

    -gt  大于 应用于:整型比较

    -le  小于或等于 应用于:整型比较

    -ge  大于或等于 应用于:整型比较

    -a  双方都成立(and) 逻辑表达式 –a 逻辑表达式

    -o  单方成立(or) 逻辑表达式 –o 逻辑表达式

    -z  空字符串

    -n  非空字符串

    6.1 test 命令

    # test 1 = 1 && echo 'ok'

    ok

    # test -d /etc/ && echo 'ok'

    ok

    # test 1 -eq 1 && echo 'ok'

    ok

    # if test 1 = 1 ; then echo 'ok'; fi

    ok

    注意:所有字符 与逻辑运算符直接用“空格”分开,不能连到一起。test 1=1就是错误的!

    6.2 [] 表达式

     # [ 1 -eq 1 ] && echo 'ok'

    ok

    # [ 2 < 1 ] && echo 'ok'

    -bash: 2: No such file or directory

    # [ 2 < 1 ] && echo 'ok'

    # [ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'

    ok

    # [ 2 -gt 1 && 3 -lt 4 ] && echo 'ok'

    -bash: [: missing `]'

    注意:在[] 表达式中,常见的>, <需要加转义字符,表示字符串大小比较,以acill码 位置作为比较。

    不直接支持<, >运算符,还有逻辑运算符|| , && 它需要用-a[and] –o[or]表示

    6.3 [[]] 表达式

    # [ 1 -eq 1 ] && echo 'ok'

    ok

    # [[ 2 < 3 ]] && echo 'ok'

    ok

    #[[ 2 < 3 && 4 > 5 ]] && echo 'ok'

    ok

     [[ 2 < 3 -a 3 > 4 ]] && echo "ok"

    -bash: syntax error in conditional expression

    -bash: syntax error near `-a'

    注意:[[]] 运算符只是[]运算符的扩充。能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:|| && ,不再使用-a -o

    华丽丽的分割线

    **********************************************************************************************************************************************

     另外一部份总结:

    bash shell中` `与[ ]的区别

    一,[[用"&&"而不是"-a"表示逻辑"与",用"||"而不是"-o"表示逻辑"或":

    # [[ 1 < 2 && b > a ]] && echo true || echo false

    true

    # [[ 1 < 2 -a b > a ]] && echo true || echo false

    bash: syntax error in conditional expression

    bash: syntax error near `-a’

    # [ 1 < 2 -a b > a ] && echo true || echo false

    true

    # [ 1 < 2 && b > a  ]&& echo true || echo false #wrong syntax

    bash: [: missing `]‘

    false

    二,[ ... ]为shell命令,所以在其中的表达式应是它的命令行参数,所以串比较操作符”>” 与”<”必须转义,否则就变成IO改向操作符了。[[中"<"与">"不需转义:

    #  [ 2 < 10 ] && echo true || echo false  #you should use “<”

    false

    #[ 2 -lt 10 ] && echo true || echo false

    true

    #  [[ 2 < 10 ]] && echo true || echo false

    false

    三,` `.``.``.` `进行算术扩展,而[ ... ]不做。

    #  [[ 99+1 -eq 100 ]] && echo true || echo false

    true

    #  [ 99+1 -eq 100 ] && echo true || echo false

    bash: [: 99+1: integer expression expected

    false

    #  [ $((99+1)) -eq 100 ] && echo true || echo false

    true

    四,[[]]能用正则,而[]不行

    # [ "test.php" == *.php ] && echo true || echo false

    false

    # [[ "test.php" == *.php ]] && echo true || echo false

    true

    # [[ "t.php" == [a-z].php ]] && echo true || echo false

    true

    # [ "test.php" == "*.php" ] && echo true || echo false

    false

    # [[ "test.php" == "*.php" ]] && echo true || echo false

    false

    注意:双引号("")的作用

  • 相关阅读:
    HDU 2844 Coins(多重背包)
    HDU 4540 威威猫系列故事——打地鼠(DP)
    Codeforces Round #236 (Div. 2)
    FZU 2140 Forever 0.5
    HDU 1171 Big Event in HDU(DP)
    HDU 1160 FatMouse's Speed(DP)
    ZOJ 3490 String Successor
    ZOJ 3609 Modular Inverse
    ZOJ 3603 Draw Something Cheat
    ZOJ 3705 Applications
  • 原文地址:https://www.cnblogs.com/tony1314/p/8315666.html
Copyright © 2011-2022 走看看