shell 条件测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# 条件测试
# test <测试表达式>
# [ <测试表达式> ] 一般使用 -a 且 -o 或 -gt 大于 -lt 小于 整数
# [[ <测试表达式> ]] 可以使用通配符进行模式匹配 && || > <
# (( <测试表达式> )) 可以使用通配符进行模式匹配

# test语法
test -f /root/666.sh && echo true || echo false # 存在/root/666.sh文件返回true 反之false
test -f /root/222.sh || touch 222.sh # 文件不存在就创建
test -z "teststring" && echo true || echo false #如果s字符串长度为0 成立返回true 反之false

# [ x ]语法
[ -f /root/666.sh ] && echo true || echo false # 存在/root/666.sh文件且是普通文件返回true 反之false

# 常用文件测试操作符
# -d directory 存在且是目录返回true 反之false
# -f file 存在且是普通文件返回true 反之false
# -e exist 存在返回true 反之false
# -s size 存在且文件大小不为0返回true 反之false
# -r read 存在且可读返回true 反之false
# -w write 存在且可写返回true 反之false
# -x executable 存在且可执行返回true 反之false
# -L link 存在且链接文件返回true 反之false
# f1 -nt f2 newer than 文件f1比文件f2新返回true 反之false
# f1 -ot f2 older than 文件f1比文件f2旧返回true 反之false

# 字符串测试操作符
# -n no zero "字符串" 字符串长度不为0返回true 反之false
# -z zero "字符串" 字符串长度为0返回true 反之false
# "字符串1" == "字符串2" 相等返回true 反之false
# "字符串1" != "字符串2" 不相等返回true 反之false

# 整数比较操作符
# [] test (()) [[]]
# -eq ==或= 相等 equal
# -ne != 不相等 not equal
# -gt > 大于 greater than
# -ge >= 大于等于 greater equal
# -lt < 小于 less than
# -le <= 小于等于 less equal

# 逻辑操作符
# [] test (()) [[]]
# -a && 与|且 and
# -o || 或 or
# ! ! 非 not

echo 1.apache
echo 2.nginx
echo 3.tomcat
read -p "please select op: " op
[ "$op" == "1" ] && {
echo "select apache"
exit 0
}
[ "$op" == "2" ] && {
echo "select nginx"
exit 0
}
[ "$op" == "3" ] && {
echo "select tomcat"
exit 0
}
[[ ! "$op" =~ [1-3] ]] &&{
echo "select error only input 1|2|3"
exit 1
}

# 总结
# [] test [[]] (())
# 加空格 y y y n
# 操作符 -a -o ! 同[] && || ! 同[[]]
# 整数比较符 -gt -lt -ge -le -eq 同[] -gt -lt -ge -le -eq
# > < >= <= = 同[[]]
# 字符串比较符 = == != 同[] 同[] 同[]
# 是否支持统配符 n 同[] y 同[]