用于 if/while 等作为判断的条件;
test condition ,在条件为 true 时返回 0 ;
if test condition; then if [ condition ]; then # 注意空格, TBD 是否支持 if 0
... <==> ...
fi fi
1 )数值比较
-eq -ge -gt -le -lt -ne
2 )字符串比较:
= != < >( 注意转义 ) -n( 是否非空串 ) -z( 是否空串 ) ;
test 中大写字符小于小写,刚好与 sort 相反
eg: if [ "a" /> “b” ]; then
eg: if [ -n "$1" ]; then <==> [ "$1" ] #$1 需要引起来,否则判断失败
eg: if [string1 -a string2]; then #string1/string2 都为真
eg: if [string1 -o string2]; then #string1 或 string2 为真
3 )文件比较:
-d file #directory, file 是否为目录
-e ##exist, file 是否存在
-f #file , an exist file
-r #readable
-s #not empty
-w #writable
-x #executable ,且 current user 必须有执行权限
-O #owered by current user
-G # 文件默认用户组为 current user group
file1 -nt file2 # file1 new than file2
file1 -ot file2 # old than
以上比较在文件不存在时将返回失败,因此可以先判断文件是否存在再执行其他比较;
类似 C : [ cond1 ] && [ cond2 ] || [ cond3 ]
if [ 'a' /< 'b' ] && [ 'a' /< "c" ] || [ 'a' /< 'a' ];then
双圆括号表数学表达式,也可用于数学计算, if (( $A ** 2 > 90 ))
双方括号提供模式匹配功能,可使用正则表达式, if [[ $A == r* ]]
TBD :怎么表示逻辑非?