test 命令可以用于判断文件类型以及值的比较,test 判断条件为真,返回 0;条件为假,返回 1。
目录
一、条件判断
(1) 整数判断
(2) 字符串判断
(3) 文件判断
二、if 语句
1、语法结构
2、实际运用
三、case语句
一、条件判断
(1) 整数判断
整数判断用到的运算符如下:
运算符 | 含义 |
-eq | 等于(equal) |
-gt | 大于(greater than) |
-lt | 小于(less than) |
-ge | 大于等于(greater equal) |
-le | 小于等于(less equal) |
-ne | 不等于(not equal) |
# 如果一行有多个命令,命令行通过 ‘;’ 来判断一个命令是否结束
# $? 表示上一条命令的执行结果命令行使用 ; 来分隔不同的命令
# test 1 -eq 1 的执行结果为真,返回 0,因此 $? 拿到的值就是 0
[gzx@VM-16-2-centos ~]$ test 1 -eq 1;echo $?
0
[gzx@VM-16-2-centos ~]$ test 1 -eq -1;echo $?
1
[gzx@VM-16-2-centos ~]$ test 1 -gt -1;echo $?
0
(2) 字符串判断
字符串判断用到的运算符如下:
运算符 | 含义 |
== | 等于 |
!= | 不等于 |
-n | 检查字符串长度是否大于0 |
-z | 检查字符串长度是否等于0 |
#注意:字符串和运算符之间必须要有空格隔开
[gzx@VM-16-2-centos ~]$ test $USER == 'root';echo $?
0
[gzx@VM-16-2-centos ~]$ test $USER == 'roat';echo $?
1
(3) 文件判断
test命令除了可以做值的比较外,还可以检测文件类型
选项 | 含义 |
-d name | 测试name 是否为一个目录 |
-e name | 测试一个文件是否存在 |
-f name | 测试name 是否为普通文件 |
-L name | 测试name 是否为符号链接 |
-r name | 测试name 文件是否存在且为可读 |
-w name | 测试name 文件是否存在且为可写 |
-x name | 测试name 文件是否存在且为可执行 |
-s name | 测试name 文件是否存在且其长度不为0 |
f1 -nt f2 | 测试文件f1 是否比文件f2 更新 |
f1 -ot f2 | 测试文件f1 是否比文件f2 更旧 |
[gzx@VM-16-2-centos ~]$ test -f file.txt;echo $?
0
[gzx@VM-16-2-centos ~]$ test -d file.txt ;echo $?
1
二、if 语句
1、语法结构
if 表达式1
then 执行语句1
else 执行语句2
fi
2、实际运用
可以使用方括号代替 test 命令,但是首尾至少要有一个空格
# 命令行输入
[gzx@VM-16-2-centos ~]$ ./variable.sh file.txt
################# 写法一 #################
# variable.sh
if test -d $1
then echo "File $1 exists"
else
echo "File $1 not exists"
fi
################# 写法二 #################
if [ -d $1 ]
then echo "File $1 exists"
else
echo "File $1 not exists"
fi
三、case语句
case 字符串变量 in
模式1)
执行语句1
;;
模式2)
执行语句2
;; #双分号结束(类似于C的break)
*) # * 表示其他模式(类似于C的default)
执行语句3
;;
esac