06 - shell条件判断

2022-03-18  本文已影响0人  舍是境界

shell脚本的智能化

test测试操作

help test
test: test [expr]
    Exits with a status of 0 (true) or 1 (false) depending on
    the evaluation of EXPR.  Expressions may be unary or binary.  Unary
    expressions are often used to examine the status of a file.  There
    are string operators as well, and numeric comparison operators.
    
    File operators:
    
        -a FILE        True if file exists.
        -b FILE        True if file is block special.
        -c FILE        True if file is character special.
        -d FILE        True if file is a directory.
        -e FILE        True if file exists.
        -f FILE        True if file exists and is a regular file.
        -g FILE        True if file is set-group-id.
        -h FILE        True if file is a symbolic link.
        -L FILE        True if file is a symbolic link.
        -k FILE        True if file has its `sticky' bit set.
        -p FILE        True if file is a named pipe.
        -r FILE        True if file is readable by you.
        -s FILE        True if file exists and is not empty.
        -S FILE        True if file is a socket.
        -t FD          True if FD is opened on a terminal.
        -u FILE        True if the file is set-user-id.
        -w FILE        True if the file is writable by you.
        -x FILE        True if the file is executable by you.
        -O FILE        True if the file is effectively owned by you.
        -G FILE        True if the file is effectively owned by your group.
        -N FILE        True if the file has been modified since it was last read.
    
      FILE1 -nt FILE2  True if file1 is newer than file2 (according to
                       modification date).
    
      FILE1 -ot FILE2  True if file1 is older than file2.
    
      FILE1 -ef FILE2  True if file1 is a hard link to file2.
    
    String operators:
    
        -z STRING      True if string is empty.
    
        -n STRING
        STRING         True if string is not empty.
    
        STRING1 = STRING2
                       True if the strings are equal.
        STRING1 != STRING2
                       True if the strings are not equal.
        STRING1 < STRING2
                       True if STRING1 sorts before STRING2 lexicographically.
        STRING1 > STRING2
                       True if STRING1 sorts after STRING2 lexicographically.
    
    Other operators:
    
        -o OPTION      True if the shell option OPTION is enabled.
        ! EXPR         True if expr is false.
        EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
        EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
    
        arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,
                       -lt, -le, -gt, or -ge.

字符串比较

[ -z "$TT" ]
echo $?
0

[ -z "$x" ]
echo $?
1

[ "$USER" == root ]
echo $?
1

 [ a == a ]
echo $?
0

[ b == a ]
echo $?
1

整数值比较

操作符 含义
-eq 等于(Equal)
-ne 不等于(not equal)
-ge 大于或等于(greater or equal)
-le 小于或等于(less or equal)
-gt 大于(greater than)
-lt 小于(less than)
who | wc -l
       2
$ [ $(who |wc -l) -le 5 ]
echo $?
0

[ 3 -lt 8 ];echo $?
0

$ [ 3 -lt 2 ];echo $?
1

文件状态测试

操作符 含义
-e 判断对象是否存在(exist),若存在则为真
-d 判断是否为目录(directory),是则为真
-f 判断对象是否为一般文件(File),是则为真
-r 判断对象是否有可读(read)权限,是则为真
-w True if the file is writable by you.
-x True if the file is executable by you.
[ -e /etc/ ]; echo $?
0

[ -e /etc/hosts ]; echo $?
0

 [ -e /etc/xxx ]; echo $?
1

[ -r /etc/ ]; echo $?
0

小结

上一篇 下一篇

猜你喜欢

热点阅读