一、条件表达式

1.语法介绍

表达式说明
test 表达式test命令进行条件测试
[ 表达式 ]单中括号方式,功能同test命令,推荐
[[ 表达式 ]]双中括号,前两种的升级版
((表达式))双小括号,一般用于if语句

双中括号可以使用通配符
&&、||、<、>等可以用于双中括号,不能用于单中括号
单中括号中用-a、-o、-gt、-lt代替
整数的关系运算也可以用双小括号
中括号里表达式前后都需要有空格

2.用法和小结

1) 普通用法

test -f /etc/passwd && echo 1 || echo 0
[ -f /etc/passwd ] && echo 1 || echo 0    
[[ -f /etc/passwd ]] && echo 1 || echo 0 
((3>2)) && echo 1 || echo 0 

可以只写一半的条件语句,例如只写为真、为假时怎么操作

test -f /etc/passwd && echo 1
test -f /etc/passwd || echo 0

2) 扩展用法

如果需要执行的命令有多条,可以用下面的扩展语法

[ 条件1 ]  &&{
  命令1
  命令2
  命令3
}

二、文件测试操作符

1. 文件操作符介绍

操作符操作符说明
-d文件存在且为目录
-f文件存在且为普通文件
-e文件存在,不管是什么文件类型
-r文件存在且可读
-w文件存在且可写
-x文件存在且可执行
-s文件存在且大小不为0
-L文件存在且为链接文件
f1 -nt -f2前面的文件比后面的文件新
f1 -ot -f2前面的文件比后面的文件旧

以上文件操作符对[]、[[]]、test三者通用
读写执行权限并不全看文件属性,而是要结合实际用户,如root在没有读写权限时也能读写

2. 应用举例

[ -f /etc/passwd ] && echo 1||echo 0
[ -d /etc/passwd ] && echo 1||echo 0
[ -e /etc/passwd ] && echo 1||echo 0
[ -r /etc/passwd ] && echo 1||echo 0
[ -x /etc/passwd ] && echo 1||echo 0
[ -w /etc/passwd ] && echo 1||echo 0
[ -L /etc/passwd ] && echo 1||echo 0

三、字符串测试操作符

1. 操作符介绍

操作符操作符说明
-n "字符串"若字符串长度不为0则表达式成立
-z "字符串"若字符串长度为0则表达式成立
"串1" = "串2"若字符串1等于字符串2则表达式成立
"串1" != "串2"若字符串1不等于字符串2则表达式成立

对字符串的测试一定要将字符串加双引号后再比较
比较符号(如=和!=)两端一定要有空格

2. 简单案例演示

[ -n "" ] && echo 1 || echo 0       
[ -z "" ] && echo 1 || echo 0 
[ "abc" = "abc" ] && echo 1 || echo 0       
[ "abc" != "abc" ] && echo 1 || echo 0

四、整数比较操作符和逻辑操作符

1. 操作符介绍

[]和test中(())和[[]]中说明
-eq==或=等于 (equal)
-ne!=不等于 (not equal)
-gt>大于 (greater than)
-ge>=大于等于 (greater equal)
-lt<小于 (less than)
-le<=小于等于 (less equal)

=和!=也可以在[]中做比较实用,但是需要转义
-gt和-lt也能在[[]]中使用,但不建议
比较符号两端也要有空格

2. 逻辑操作符介绍

[]和test中(())和[[]]中说明
-a&&and,与
-o||or,或
!!not,非
> 连接两个[]或[[]]的表达式可以用&&或||

-a和&&,需要两端为真才为真
-o和||,只需要任意一段为真就为真`

3.[]、[[]]、(())用法小结

[]、[[]]、(())用法总结