一、条件表达式

1.语法介绍

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

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

2.用法和小结

1) 普通用法

1
2
3
4
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

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

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

2) 扩展用法

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

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

二、文件测试操作符

1. 文件操作符介绍

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

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

2. 应用举例

1
2
3
4
5
6
7
[ -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. 简单案例演示

1
2
3
4
[ -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.[]、[[]]、(())用法小结

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