[: [ arg... ]
    Evaluate conditional expression.

    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.

由上面的输出结果可知,[与test命令是相同的功能,所以这里再展开的学习一下test命令

test: test [expr]
    Evaluate conditional expression.

    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 and numeric comparison operators as well.

    The behavior of test depends on the number of arguments.  Read the
    bash manual page for the complete specification.

   ** 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.

    All file operators except -h and -L are acting on the target of a symbolic
    link, not on the symlink itself, if FILE is a symbolic link.

    **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.
      -v VAR     True if the shell variable VAR is set
      -R VAR     True if the shell variable VAR is set and is a name reference.
      ! 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.

    Arithmetic binary operators return true if ARG1 is equal, not-equal,
    less-than, less-than-or-equal, greater-than, or greater-than-or-equal
    than ARG2.

    See the bash manual page bash(1) for the handling of parameters (i.e.
    missing parameters).

    Exit Status:
    Returns success if EXPR evaluates to true; fails if EXPR evaluates to
    false or an invalid argument is given.

由上面的help内容可以知道test,有三类操作:

1.文件操作

这里仅作一个-a 参数(测试文件是否存在)的示例 一般情况下/etc/profile 文件是存在的,若存在输出1,不存在输出2

而/etc/profile1是我自己额外测试的文件,显然是不存在的,存在输出1,不存在输出2

if test -a /etc/profile; then echo 1; else echo 2; fi
1
if test -a /etc/profile1; then echo 1; else echo 2; fi
2

下面使用[ ]来进行一上面的操作:

if [ -a /etc/profile ]; then echo 1; else echo 2; fi
1
if [ -a /etc/profile1 ]; then echo 1; else echo 2; fi
2

注意,[]与里面的内容的两边各有一个空格,不加的话会报错!

2.字符串操作

-z 字符串为空时,为真,否则为假

abc为空,所以为真,输出1

HOME不为空,里面存的是当前用户的家目录,所以为假,输出2

if [ -z $abc ]; then echo 1; else echo 2; fi
1
if [ -z $HOME ]; then echo 1; else echo 2; fi
2
3.其他操作

当某个变量被设定过,返回为真,没有为假

由于HOME存在,返回为真,输出1

但是abc不存在,返回为假,输出2

if [ -v HOME ]; then echo 1; else echo 2; fi
1
if [ -v abc ]; then echo 1; else echo 2; fi
2

results matching ""

    No results matching ""