条件测试与语句结构
一、条件测试
条件测试的概述
1、条件测试的作用:对特定的条件进行判断,已决定如何执行操作。
2、条件测试大概分为一下几类:
文件测试、整数测试、字符串测试、逻辑测试
测试方法
使用test
命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
注意使用格式2,中括号与条件表达式之间需要加上空格 |
文件测试
[操作符文件或目录]
常用的测试操作符
字符 | 说明 |
---|---|
-d | 测试是否为目录(Directory)、查看目录是否存在 |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File)、查看文件是否存在 |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-L | 测试是否为符号链接 |
文件测试操作实验
整数测试
[ 整数1 操作符 整数2 ]
常用的测试操作符
字符 | 说明 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-gt | 大于(Greater Than) |
-lt | 小于(Lesser Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
整数测试操作实验
[root@localhost /opt] # who | wc -l
2
[root@localhost /opt] # [ $(who | wc -l) -gt 1 ]&& echo "ok"
ok
[root@localhost /opt] # [ $(who | wc -l) -gt 5 ]&& echo "ok"
[root@localhost /opt] # [ $(who | wc -l) -eq 5 ]&& echo "ok"
[root@localhost /opt] # [ $(who | wc -l) -lt 5 ]&& echo "ok"
ok
[root@localhost /opt] # free -m
total used free shared buff/cache available
Mem: 1823 778 151 17 894 804
Swap: 4095 0 4095
[root@localhost /opt] # free -m | grep -i "mem:"
Mem: 1823 778 150 17 894 804
[root@localhost /opt] # free -m | grep -i "Mem:"| awk '{print $4}'
150
[root@localhost /opt] # zb=`free -m | grep -i "Mem:"| awk '{print $4}'`
[root@localhost /opt] # echo $zb
150
[root@localhost /opt] # [ $zb -lt 500 ] && echo "警告:当前内存不足,内存为:${zb}M"
警告:当前内存不足,内存为:150M
字符串测试
格式1:
[ 字符串1 =字符串2 ]
[ 字符串1 !=字符串2 ]
格式2:
[ -z 字符串 ]
常用的测试操作符
字符 | 说明 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,! 号表示相反的意思 |
-z | 字符串内容为空 |
-n | 判断是否有字符存在 |
字符串测试操作实验
测试当前用户名称
[root@localhost /opt] # [ $USER = "root" ] && echo true
true
[root@localhost /opt] # [ $USER != "root" ] && echo true
测试字符串
[root@localhost /opt] # read -p "yes/no: " ACK
yes/no:
[root@localhost /opt] # echo $ACK
[root@localhost /opt] # [ -z $ACK ] && echo true
true
[root@localhost /opt] # read -p "yes/no: " ACK
yes/no: yes
[root@localhost /opt] # [ -z $ACK ] && echo true
[root@localhost /opt] # [ -n $ACK ] && echo true
true
逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2 ...
常用的测试操作符
●-a或&&
:逻辑与,“而且”的意思
●-o或||
:逻辑或,“或者”的意思
●!
:逻辑否
逻辑测试操作实验
测试&&逻辑与运算符,当前面的表达式成立不会执行||后面的运算符,直接输出true
测试||运算符,前面表达式不成立,和表达式与的true执行失败,这时候会执行后面的运算||,输出false
除了使用(( ))
两个小括号表示,也可以使用[[ ]]
两个中括号表示,不过使用中括号,在<
号或>
号前面需要加上一个/
转义符,这样才能表示
我们也可以使用变量来表示
设置一个变量值为5,表达这个变量不等于1而且不等于2,使用返回码查看这个表达式成不成立,成立输入返回码为0
除了&&我们还可以用-a,
我们试试使用&&写这样格式,结果报错,缺少[],我们加上[]表达式成立了,所以格式很重要
三元运算符表示
二、语句的结构
if语句结构
单分支结构
if 条件测试操作
then 命令序列
fi
实验:使用if语句编写磁盘空间不足,设置个变量值为10,使用if编辑磁盘空间大于等于5警告空间不足
双分支结构
if 条件测试操作
then 命令序列1
else 命令序列2
fi
实验:开启监听80端口,没有监听开启httpd服务,没有httpd服务安装并开启
多分支结构
if 条件测试操作1
then命令序列1
elif条件测试操作2
then命令序列2
else
命令序列3
fi
case语句结构
case多分支结构
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
.......
*)
默认命令序列
esac
case语句和if语句不同,if语句是一个数值在脚本文件中一个个筛选,然后选择正确的条件测试,而case是直接根据数值选择相对的的命令序列,在写入脚本文件过多的情况下,case比if效率高些