[: [ 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