一、条件测试
[root@localhost ~]# test a==b
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ a==b ]
[root@localhost ~]# echo $?
0
一、文件测试
文件测试:根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否存在,是否可读、可写、可执行等
选项 | 说明 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-L | 测试是否为链接文件 |
-b | 测试是否为设备文件 |
-c | 测试是否为字符设备文件 |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试是否设置有可执行(Excute) 权限 |
-s | 测试存在且文件大小为空 |
测试目录
[root@localhost ~]# [ -d /home ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d /re ]
[root@localhost ~]# echo $?
1
二、整数测试
选项 | 含义 |
---|---|
-eq | 第一个数等于(Equal) 第二个数 |
-ne | 第一个数不等于(Not Equal) 第二个数 |
-gt | 第一个数大于(Greater Than) 第二个数 |
-lt | 第一个数小于(Lesser Than) 第二个数 |
-le | 第-个数小于或等于(Lesser or Equal) 第二个数 |
-ge | 第一个数大于或等于(Greater or Equal) 第二个数 |
[root@localhost ~]# [ 3==4 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 1 -eq 2 ]
[root@localhost ~]# echo $?
1
三、字符串测试
[root@localhost ~]# test a==b
[root@localhost ~]# echo $?
0
[root@localhost ~]# test a!=b #!表示否定、不的意思
[root@localhost ~]# echo $?
0
四、逻辑测试
&&:表示前一条命令执行成功时, 才执行后一条命令
II:示上一条命令执行失败后,才执行下一条命令
[root@localhost ~]# a=1
[root@localhost ~]# [ -z $a ] && echo y || echo n #-z检测变量值字符串是否为空值
n
[root@localhost ~]# [ -n $a ] && echo y || echo n #-n检测变量值字符串是否为非空值(空格算成非空值)
y
-a:表示且,同时满足
-o:表示或,满足一个
[root@localhost ~]# [ 1 -eq 2 -a 1 -lt 2 ] && echo y || echo n
n
[root@localhost ~]# [ 1 -eq 2 -o 1 -lt 2 ] && echo y || echo n
y
二、if语句
结构
单分支
只要满足“相对应的条件”,便可执行后面的命令
if 条件判断
then
命令
fi
双分支
针对“条件成立”“条件不成立”两种情况,分别执行相应的代码
if 条件判断
then
命令
elif 条件判断
then
命令
else
命令
f
多分支
嵌套使用,进行多次判断
if 条件测试操作
then
命令序列
elif 条件测试操作
then
命令序列
else
命令序列
fi
实例
#!/bin/bash
#评分
read -p "请输入分数" number
if [ $number -lt 0 -o $number -gt 100 ];then
echo "请重新输入"
elif [ $number -ge 90 -a $number -le 100 ];then
echo "优秀"
elif [ $number -ge 70 -a $number -le 89 ];then
echo "良好"
elif [ $number -ge 60 -a $number -le 69 ];then
echo "及格"
else
echo "不及格"
fi
case语句
当变量值有多个数值的情况,可以使用case
模式中的数字只能写[0-9],列:1[0-9]:表示10-19。
实例
#!/bin/bash
#输入一个月份,判断在一年那个季度
read -p "请输入月份:" yue
case $yue in
[1-3])
echo "第一季度";;
[4-6])
echo "第二季度";;
[7-9])
echo "第三季度";;
1[0-2])
echo "第四季度";;
*)
echo "输入错误"
esac