if条件测试常用的语法
- test <测试表达式>
- [ <测试表达式> ]
- [[ <测试表达式> ]]
- ((<测试表达式>))
test命令和[]测试操作符
- test <测试表达式>
- [ <测试表达式> ]
(这两种语法是等价的)
测试操作符 全拼 说明 -d directory 文件存在且为目录 -f file 文件存在且为普通文件 -e exist 文件存在 -r read 文件存在且可读 -s size 文件存在且文件大小不为0 -w write 文件存在且可写 -x exexutable 文件存在且可执行 -L link 文件存在且为链接文件 f1 -nt f2 newer than 文件f1比文件f2新 f1 -ot f2 olderthan 文件f1比文件f2旧 -n not zero 字符串的长度不为0 -z zero 字符串的长度为0 s1 = s2 字符串1等于字符串2 s1 != s2 字符串1不等于字符串2 -eq equal 相等 -ne not equal 不相等 -gt greater than 大于 -ge greater equal 大于等于 -lt less than 小于 -le less equal 小于等于 -a and 与 -o or 或 ! not 非 范例:
test -f /data/test.sh && echo true || echo false [ -f /data/test.sh ] && echo true || echo false
- 用[]测试变量时,如果被测试的变量不加双引号,那么测试结果可能会是不正确的:
file1=/etc/passwd [ -f "$file1" ] && echo 1 || echo 0 如果是文件实体路径,那么加引号与不加引号的结果是一样的: [ -f "/etc/passwd" ] && echo 1 || echo 0 [ -f /etc/passwd ] && echo 1 || echo 0
[[]]测试操作符
- [[ <测试表达式> ]]
在[[]]中可以使用通配符等进行模式匹配 [[ ! $a =~ [1-3] ]] && echo 1 || echo 0
测试操作符 全拼 说明 -d directory 文件存在且为目录 -f file 文件存在且为普通文件 -e exist 文件存在 -r read 文件存在且可读 -s size 文件存在且文件大小不为0 -w write 文件存在且可写 -x exexutable 文件存在且可执行 -L link 文件存在且为链接文件 f1 -nt f2 newer than 文件f1比文件f2新 f1 -ot f2 olderthan 文件f1比文件f2旧 -n not zero 字符串的长度不为0 -z zero 字符串的长度为0 s1 = s2 字符串1等于字符串2 s1 != s2 字符串1不等于字符串2 ==/= equal 相等 != not equal 不相等 | greater than | 大于
-ge | greater equal | 大于等于
< | less than | 小于
-le | less equal | 小于等于
&& | and | 与
|| | or | 或
! | not | 非
(())测试操作符
- ((<测试表达式>))
- 常用与计算
- 对于整数的关系运算,也可以使用Shell的算术运算符(())
((3>2)) && echo 1 || echo 0 ((3!=2&&5==5)) && echo 1 || echo 0