if语句
if condition
then
statements(s)
fi
实例1
实例2
实例3:判断a和b是否相等
实例4
if elif else 语句
if condition1
then
statements1
elif condition2
then
statements2
elif condition3
then
statement3
......
else
statement
fi
注: if 和 elif 后边必须加上 then
实例5
test
test 是 Shell 内置命令,
- 用来检测某个条件是否成立。
- 和 if 语句一起使用,并且大部分 if 语句都依赖 test
- test 命令有很多选项,可以进行数值、字符串和文件三个方面的检测。
Shell test 命令的用法为:
-
test expression
当 test 判断 expression 成立时,退出状态为0,否则为非0值 -
[ ]
[ expression ]
注:[ ]和expression之间的空格必须要有的,否则会语法报错。
test 命令可以判断 三类 条件
- 数值比较。
可以用在数字和变量上
比较 | 描述 |
---|---|
n1 -eq n2 | 检查n1是否与n2相等 |
n1 -ge n2 | 检查n1是否大于或等于n2 |
n1 -gt n2 | 检查n1是否大于n2 |
n1 -le n2 | 检查n1是否小于或等于n2 |
n1 -lt n2 | 检查n1是否小于n2 |
n1 -ne n2 | 检查n1是否不等于n2 |
实例1: 比较变量的值和数字的大小,比较变量的值和变量的值的大小
test命令中不能使用浮点数
- 字符串比较
比较 | 说明 |
---|---|
str1 = str2 | 检查str1是否和str2相同 |
str1 != str2 | 检查str1是否和str2不同 |
str1 < str2 | 检查str1是否比str2小 |
str1 > str2 | 检查str1是否比str2大 |
-n str1 | 检查str1的长度是否非0 |
-z str1 | 检查str1的长度是否为0 |
注:
- 如果第一个字符串是第二个字符串的前缀,那么第一个小(比如a小于about)
- 从字符串的开头比较,按照字母顺序,a比b小(比如about小于ball)
- 如果第一个字符相同,再比较第二个(比如about小于above)
实例2: 判断当前登录用户是否为root(等于和不等于比较)
实例3:判断两个字的字符串的大小(大于小于比较)
注: 不转义大于号时,shell会将 > 识别为输出重定向,它会创建hockey文件。因为系统会执行重定向(if后面)的语句,所以退出状态为0,判断条件为真,所以会执行then后面的语句。
实例4: 判断字符串长度是否为0(是否为0比较)
- 文件比较
比较 | 说明 |
---|---|
-d file | 检查file是否存在并是一个目录 |
-e file | 检查file是否存在 |
-f file | 检查file是否存在并是一个文件 |
-r file | 检查file是否存在并可读 |
-s file | 检查file是否存在并非空 |
-w file | 检查file是否存在并可写 |
-x file | 检查file是否存在并可执行 |
-O file | 检查file是否存在并属当前用户所有 |
-G file | 检查file是否存在并且默认组与当前用户相同 |
file1 -nt file2 | file2 检查file1是否比file2新 |
file1 -ot file2 | file2 检查file1是否比file2旧 |
实例1:判断目录是否存在(-d)
实例2:判断文件是否存在(-e) 可欠套
实例3:判断文件是否存在并且是一个普通文件(-f)
实例3:判断文件是否可读(-r)
实例4: 如果文件是否存在并且非空(-s)
实例5:如果文件存在且可写为真(-w)
测试此文件 需要切换至普通用户
实例6:测试文件是否可执行(-x)
实例7:判断文件是否存在并且属于当前用户所有(-O)
实例8:判断文件是否存在并且默认组与当前用户的相同(-G)
实例9:判断文件的创建时间的早晚(新旧)(-nt | -ot )
复合条件测试
if then的高级特性
- 双尖括号(())
- 方括号 [[ ]] —>有针对字符串比较高级的特性—>通配功能